我甚至不确定如何表达这一点,所以我非常抱歉,如果标题令人困惑..我的XAML(简化)看起来像这样:
<UserControl x:Class="PBA.Application.Client.UserControls.UserControls.FreqReserve.OverView" xmlns:FreqReserve="clr-namespace:PBA.Application.Client.UserControls.UserControls.FreqReserve">
...
<DockPanel>
<UserControls:LegendControl>
<UserControls:LegendControl.Items>
<UserControls:LegendItem Visibility="{Binding Path=IsDirtyVisible, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type FreqReserve:OverView}}, Converter={StaticResource btvc}}" Identifier="Pink" Text="Ikke sendt"></UserControls:LegendItem>
<UserControls:LegendItem Identifier="Yellow" Text="Sendt"></UserControls:LegendItem>
<UserControls:LegendItem Identifier="LightGreen" Text="Accepteret"></UserControls:LegendItem>
<UserControls:LegendItem Identifier="White" Text="Ikke accepteret"></UserControls:LegendItem>
</UserControls:LegendControl.Items>
</UserControls:LegendControl>
</DockPanel>
</UserControl>
其中LegendItem列表是在legendcontrol中模板化的。
绑定表达式失败,出现System.Windows.Data错误:4。我尝试使用elementname,结果相同。我猜它与LegendItems有关,实际上并不直接在Visual树中,但我不知道(WPF菜鸟,我知道)。我究竟做错了什么?
答案 0 :(得分:1)
AncestorType中有拼写错误。你想说FreqReserve.OverView。此外,您将不得不引用UserControl中定义的库名称空间。
这样的事情:
<UserControl x:Class="PBA.Application.Client.UserControls.UserControls.FreqReserve.OverView"
...
xmlns:local="clr-namespace:PBA.Application.Client.UserControls.UserControls">
...
<DockPanel>
<UserControls:LegendControl>
<UserControls:LegendControl.Items>
<UserControls:LegendItem IsVisible="{Binding Path=IsDirtyVisible,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type local:FreqReserve.OverView}}}"
Identifier="Pink"
Text="Ikke sendt"></UserControls:LegendItem>
....
</UserControls:LegendControl>
</DockPanel>
</UserControl>
请注意,您必须为“本地”声明添加正确的命名空间,但如果您不确定它应该是什么,则应该从IntelliSense获取。