2011-09-21 3 views
2

Comment faire pour Wpf TabItem Style HeaderTemplate Binding?Comment Wpf TabItem Style HeaderTemplate Binding?

code:

<TabControl x:Name="tabCtrlMain" ItemsSource="{Binding Items}" > 
     <TabControl.Resources> 
      <Style TargetType="TabItem"> 
       <Setter Property="HeaderTemplate"> 
        <Setter.Value> 
         <DataTemplate DataType="{x:Type TabItem}"> 
          <TextBlock Text="{Binding FileName}"/> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </TabControl.Resources> 
    </TabControl> 

ce code ne fonctionne pas lors de la liaison:

<TextBlock Text="{Binding FileName}"/> 

Répondre

12

Essayez plutôt,

<TabControl x:Name="tabCtrlMain" ItemsSource="{Binding Items}" > 
     <TabControl.Resources> 
      <Style TargetType="TabItem"> 
       <Setter Property="Header" Value="{Binding FileName}" /> 
       <Setter Property="HeaderTemplate"> 
        <Setter.Value> 
         <DataTemplate DataType="{x:Type TabItem}"> 
          <Border x:Name="grid"> 
            <ContentPresenter> 
             <ContentPresenter.Content> 
              <TextBlock Text="{TemplateBinding Content}"/> 
             </ContentPresenter.Content> 
            </ContentPresenter> 
           </Border> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </TabControl.Resources> 
    </TabControl> 
+0

Le plus gros problème ici est que vous ne pouvez pas utiliser un TemplateBinding dans un DataTemplate. À part cela, il devrait faire ce qui a été demandé. – MojoFilter

9

Je sais c'est terriblement vieux maintenant, mais je pensais Je jetterais mes deux cents dans juste pour l'exhaustivité et l'exactitude historique :)

Je préfère utiliser le ItemContainerStyle pour faire la même chose juste parce qu'il se sent me un peu plus propre car elle énonce l'objet exactement:

<TabControl ItemsSource="{Binding Items}"> 
    <TabControl.ItemContainerStyle> 
    <Style TargetType="TabItem"> 
     <Setter Property="Header" Value="{Binding FileName}" /> 
     <Setter Property="HeaderTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
      <Border> 
       <TextBlock Text="{Binding Content}" /> 
      </Border> 
      </DataTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
    </TabControl.ItemContainerStyle> 
</TabControl> 

De plus, si le seul but est d'obtenir le FileName dans la tabulations puis il peut être beaucoup plus simple:

<TabControl ItemsSource="{Binding Items}" DisplayMemberPath="FileName" />