如何设置TabControls TabItem标题FontSize

时间:2014-09-15 08:49:58

标签: wpf header tabcontrol tabitem

我有一个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>

1 个答案:

答案 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。

ForegroundFontSize是可继承的。

如果你有类似的话:

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

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