【问题标题】:How do I set TabControls TabItem header FontSize如何设置 TabControls TabItem 标题 FontSize
【发布时间】:2014-11-08 17:55:43
【问题描述】:

我有一个 TabControl,其样式可以更改 TabItem 标题的 FontSize。当我数据绑定 ItemsSource 时,只有标题受 FontSize 影响。但是,当我在另一个 TabControl 上使用相同的样式并在 XAML 中添加 TabItems 时,TabItem 中的所有内容都会更改 FontSize。我希望该样式同时适用于数据绑定和非数据绑定的 TabItem。

<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>

【问题讨论】:

  • &lt;Setter Property="ItemContainerStyle" Value="{StaticResource VariableTabItem}" /&gt; 谁是VariableTabItem,您的选项卡控件是否具有覆盖其模板的样式?
  • 对不起,已经更改了示例中的样式名称。现在它是我的代码中的内容。
  • 好的,现在是第二个问题 - 您的选项卡控件是否具有覆盖 Template 的样式,通常您在 TabItem 上设置的属性不会影响选项卡的内容,除非您自己更改此行为.
  • 我没有覆盖 TabControl 的 Template 属性。

标签: wpf header tabcontrol tabitem


【解决方案1】:

你的问题是Property Value Inheritance的结果。

当您在 xaml 中定义 TabItems 时,如下所示:

 <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's 不是很有用,您通常需要一些高级 XAML 作为项目内容,所以我认为解决这个问题的最佳方法是更改​​TabItem's HeaderTemplate 中的所有这些文本属性,您可以使用RelativeSource 绑定到TabItem's 属性。

【讨论】:

  • 我使用 HeaderTemplate 来设置 FontSize。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 2019-04-23
  • 2012-11-13
  • 1970-01-01
  • 2012-11-11
  • 2011-09-10
相关资源
最近更新 更多