相当简单的问题(我想!)但我似乎找不到简单的答案。
我已经构建了一个包含tabcontrol和两个标签项的测试WPF应用程序。在每个tabitem上有一个按钮,它的内容绑定到存储在本地资源字典中的Path。 Path的Fill属性使用FindAncestor绑定按钮的Foreground属性。
问题:在tab1上,内容显示正确但在tab2上根本不显示。如果我删除了FindAncestor绑定并用画笔替换(例如白色),则两个按钮都会正确显示。
我希望我错过了一些简单的东西,因为这似乎应该是可能的。
代码:
<Window.Resources>
<ResourceDictionary>
<Path x:Key="TickIcon2" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" Stretch="Uniform" x:Shared="False" Data="F1 M 23.7501,33.25L 34.8334,44.3333L 52.2499,22.1668L 56.9999,26.9168L 34.8334,53.8333L 19.0001,38L 23.7501,33.25 Z"/>
</ResourceDictionary>
</Window.Resources>
<Grid>
<TabControl>
<TabItem Header="1">
<Button Content="{DynamicResource TickIcon2}" Width="50" Height="50" />
</TabItem>
<TabItem Header="2">
<Button Content="{DynamicResource TickIcon2}" Width="50" Height="50" />
</TabItem>
</TabControl>
</Grid>
答案 0 :(得分:0)
最有可能的是它与资源字典中资源的共享(默认)性质有关。
阅读:MSDN。
您可以尝试使资源不共享(x:Shared = False)
<Path x:Key="TickIcon2" x:Shared="False" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" Stretch="Uniform" x:Shared="False" Data="F1 M 23.7501,33.25L 34.8334,44.3333L 52.2499,22.1668L 56.9999,26.9168L 34.8334,53.8333L 19.0001,38L 23.7501,33.25 Z"/>
答案 1 :(得分:0)
我找到了一个解决方案,以防有人遇到这个问题。如果我使用&#39; Binding&#39;而不是&#39; DynamicResourse&#39;路径在两个选项卡上都正确显示:
<Grid>
<TabControl>
<TabItem Header="1">
<Button Content="{Binding Mode=OneWay, Source={StaticResource TickIcon2}}" Width="50" Height="50" />
</TabItem>
<TabItem Header="2">
<Button Content="{Binding Mode=OneWay, Source={StaticResource TickIcon2}}" Width="50" Height="50" />
</TabItem>
</TabControl>
</Grid>