2009-06-08 6 views
1

Je définis un DataTemplate pour l'en-tête de mes boîtes de groupes:Problèmes de liaison propriété de premier plan GroupBox HeaderTemplate

<Style x:Key="GroupBoxHeaderStyle" TargetType="{x:Type GroupBox}"> 
     <Setter Property="Foreground" Value="White"></Setter> 
     <Setter Property="HeaderTemplate"> 
      <Setter.Value> 
       <DataTemplate>      
        <TextBlock Text="{Binding}" Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Foreground}" 
           FontSize="18" FontFamily="Global User Interface"/> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Cependant la liaison fait pour le premier plan ne semble pas fonctionner. Les en-têtes de mes groupBoxes sont toujours noirs. Qu'est-ce que je fais mal?

Voici comment je définir GroupBox:

<GroupBox Header="Views" Margin="1" Foreground="White" 
      Style="{StaticResource GroupBoxHeaderStyle}"> 
      ... 

Répondre

3
... 
<TextBlock Text="{Binding}" Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupBox}}, Path=Foreground}" 
      FontSize="18" FontFamily="Global User Interface"/> 
... 
+1

Vous me devança par un cheveu! De toute façon, pour développer cela, la liaison TemplatedParent qui était utilisée ne fonctionne pas parce que le TemplatedParent est l'en-tête, pas le GroupBox. Rechercher ancêtre est le moyen correct pour récupérer les propriétés de GroupBox. – rmoore

+0

En fait, TemplatedParent est à utiliser dans ControlTemplates, je ne pense pas que cela fonctionne dans un DataTemplate. –

+0

Cela fonctionnera pour tout ce qui dérive de FrameworkTemplate, mais je suis d'accord qu'il est rarement logique de l'utiliser en dehors de ControlTemplates, même avec TemplateBindings. Vous pouvez le tester en changeant le texte dans le TextBlock à Text = "{Binding RelativeSource = {RelativeSource TemplatedParent}, Path = Content}" – rmoore

Questions connexes