如何设置TabControls TabItem标题FontSize



我有一个TabControl,它的样式可以更改TabItem的Header的FontSize。当我对ItemsSource进行数据绑定时,只有标头会受到FontSize的影响。但是,当我在另一个TabControl上使用相同的样式并在XAML中添加TabItems时,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>

您的问题是属性值继承的结果。

当您在xaml中定义TabItem时,类似于以下内容:

 <TabItem>
     <TabItem.Header>
         <TextBlock Text="TEST_HEADER1" />
     </TabItem.Header>
     <TextBlock Text="TEST_CONTENT1" />
 </TabItem>

TextBoxes、标头和内容都在TabItem的逻辑树中,这意味着在TabItem上设置的任何Inheritable属性都将沿树向下传播到这些TextBoxes。

ForegroundFontSize是可继承的。

如果你有类似的东西:

  <TabItem Header="TEST_HEADER2">TEST_CONTENT2</TabItem>

TabItem的逻辑树中没有任何元素,Header和内容的元素将自动生成,并且属性不会被继承。但是这种类型的声明TabItem的不是很有用,您通常需要一些高级XAML作为项内容,所以我认为解决这个问题的最佳方法是通过更改TabItemHeaderTemplate中的所有文本属性,您可以使用RelativeSource绑定到TabItem's属性。

最新更新