Как связать шаблон заголовка стиля Wpf TabItem? - PullRequest
3 голосов
/ 21 сентября 2011

Как сделать привязку шаблона заголовка стиля Wpf TabItem?

Код:

<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}"/>

Ответы [ 2 ]

12 голосов
/ 22 ноября 2011

Попробуйте вместо этого

<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>
11 голосов
/ 08 марта 2013

Я знаю, что сейчас это ужасно устарело, но я подумал, что я потрачу свои два цента только ради полноты и исторической точности:)

Я предпочитаю использовать 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>

Кроме того, если единственной целью является получение FileName во вкладках, то это может быть намного проще:

<TabControl ItemsSource="{Binding Items}" DisplayMemberPath="FileName" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...