2011-09-21 206 views
2

如何做Wpf TabItem樣式HeaderTemplate綁定?如何Wpf TabItem樣式HeaderTemplate綁定?

代碼:

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

結合時,這個代碼不工作:

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

回答

12

試試這個,

<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

這裏最大的問題是你不能在DataTemplate中使用TemplateBinding。除此之外,它應該做所問的。 – MojoFilter

9

我現在知道這是非常老了,但我認爲我只是爲了完整性和歷史準確性而拋出我的兩分錢:)

我喜歡用ItemContainerStyle做同樣的事情,只是因爲它的感覺乾淨了一點對我來說,因爲它規定的目的正是:

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

而且,如果唯一的目標是讓文件名進入那麼它可以更簡單:

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