我有一个TabControl,其样式可以更改TabItem标题的FontSize。当我数据绑定ItemsSource时,只有标题受FontSize的影响。但是当我在另一个TabControl上使用相同的样式并在XAML中添加TabItem时,TabItem中的所有内容都会更改FontSize。我希望样式可以使用数据绑定和非数据绑定TabItems。
<TabControl Style="{StaticResource VariablesTabControl}" ItemsSource="{Binding TabItems}">
...
</TabControl>
MainSkin.xaml:
<Style TargetType="TabControl" x:Key="VariablesTabControl">
<Setter Property="ItemContainerStyle" Value="{StaticResource VariableTabItem}" />
...
</Style>
<Style TargetType="TabItem" x:Key="VariableTabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Grid Name="Panel" MinHeight="30" MinWidth="120">
<ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Left" ContentSource="Header" Margin="10,2" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="False">
<Setter TargetName="Panel" Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}" />
<Setter Property="FontSize" Value="12" />
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Panel" Property="Background" Value="{StaticResource BackgroundMouseOver}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Panel" Property="Background" Value="{StaticResource SelectedBrush}" />
<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}" />
<Setter Property="FontSize" Value="12" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:1)
您的问题是Property Value Inheritance的结果。
当您在xaml中定义TabItem
时,如下所示:
<TabItem>
<TabItem.Header>
<TextBlock Text="TEST_HEADER1" />
</TabItem.Header>
<TextBlock Text="TEST_CONTENT1" />
</TabItem>
TextBox
es,标题和内容都在TabItem
的逻辑树中,这意味着TabItem
上设置的任何可继承属性都将沿树向下传播到这些TextBox
ES。
Foreground
和FontSize
是可继承的。
如果你有类似的话:
<TabItem Header="TEST_HEADER2">TEST_CONTENT2</TabItem>
TabItem
的逻辑树中没有任何元素,标题和内容的元素将自动生成,属性不会被继承。
但是这种声明TabItem
的方式并不是很有用,你通常需要一些高级的XAML作为项目内容,所以我认为解决这个问题的最佳方法是更改TabItem
'中的所有文本属性s HeaderTemplate
,您可以使用TabItem's
绑定到RelativeSource
属性。