【问题标题】:How To Wpf TabItem Style HeaderTemplate Binding?如何 Wpf TabItem 样式的 HeaderTemplate 绑定?
【发布时间】:2011-11-21 19:46:09
【问题描述】:

Wpf TabItem Style 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}"/>

【问题讨论】:

    标签: wpf xaml styles tabitem


    【解决方案1】:

    试试这个,

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

    【讨论】:

    • 这里最大的问题是不能在DataTemplate 中使用TemplateBinding。除此之外,它应该按照要求做。
    【解决方案2】:

    我知道这已经过时了,但我想我会为了完整性和历史准确性而投入两分钱:)

    我更喜欢使用 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" />
    

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 2013-08-04
      • 1970-01-01
      • 2010-12-03
      • 2011-03-31
      相关资源
      最近更新 更多