2015-04-29 1 views
0

Tout un problème simple (je pense!) Mais je n'arrive pas à trouver une réponse simple pour cela.WPF findancestor ne fonctionne pas sur le second tabitem

J'ai construit une application de test WPF qui contient un tabcontrol et deux éléments d'onglet. Sur chaque tabitem est un bouton et son contenu est lié à un chemin qui est stocké dans un dictionnaire de ressources local. La propriété Fill's Path est liée à la propriété Foreground du bouton à l'aide de FindAncestor.

Le problème: Sur l'onglet 1 le contenu s'affiche correctement mais sur l'onglet 2 il ne s'affiche pas du tout. Si je supprime la liaison FindAncestor et remplace avec une brosse (par exemple, blanc), les deux boutons s'affichent correctement. J'espère qu'il me manque quelque chose de simple parce que cela semble être quelque chose qui devrait être possible.

code:

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

Répondre

0

J'ai trouvé une solution en cas quelqu'un vient à travers ce problème. Si j'ai utilisé 'Binding' au lieu de 'DynamicResourse' le chemin s'affiche correctement sur les deux onglets:

<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

Très probablement, il a à voir avec la nature partagée (par défaut) des ressources dans le dictionnaire des ressources.

lu: MSDN.

Vous pouvez essayer en faisant la ressource non partagée (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"/> 
+0

Il est déjà non partagé (voir l'avant-dernière propriété) – OZ10