Как связать шаблон заголовка стиля Wpf TabItem?
Как сделать привязку HeaderTemplate стиля 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 ответа
Решение
Попробуйте это вместо этого,
<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>
Я знаю, что сейчас это ужасно устарело, но я подумал, что я добавлю свои два цента только ради полноты и исторической точности:)
Я предпочитаю использовать 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" />