2015-04-29 19 views
0

很简单的问题(我想!),但我似乎无法找到一个简单的答案。WPF findancestor不工作在第二个tabitem

我已经构建了一个包含tabcontrol和两个选项卡项目的测试WPF应用程序。在每个tabitem上是一个按钮,它的内容被绑定到存储在本地资源字典中的Path中。路径的填充属性使用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

我发现万一有人遇到这个问题的解决方案。如果我用“绑定”而不是“DynamicResourse”的路径正确地显示在两个标签:

<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> 
0

最有可能拥有资源的资源共享字典(默认)自然的事情。

阅读:MSDN

您可以通过不共享资源的尝试(X:共享= 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"/> 
+0

它已经不共享(见倒数第二个属性) – OZ10