通过TabControl中的触发器更改标题内容的FontWeight

时间:2017-09-18 15:20:20

标签: wpf xaml

选择Header时,我需要更改TabItemTabControl的{​​{1}}属性的FontWeight。我写了这段代码:

TabItem

此代码有效,但看起来过于庞大。

有没有办法在没有代码隐藏的情况下缩短此代码?

1 个答案:

答案 0 :(得分:1)

在这种情况下

<ContentPresenter>是不必要的(signle TextBlock可以是模板的根项):减去4个标签

触发器可用于TabItem:减去另外4个标签

<Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock FontSize="18" Padding="5,0,0,0" Text="{TemplateBinding Content}"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>

    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="TextElement.FontWeight" Value="SemiBold"/>
        </Trigger>
    </Style.Triggers>
</Style>

如果在选择后不适合制作整个标题SemiBold,那么请使用DataTemplate触发器:

<Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock x:Name="HeaderText" FontSize="18" Padding="5,0,0,0" Text="{TemplateBinding Content}"/>

                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TabItem}}" Value="True">
                        <Setter Property="TextElement.FontWeight" TargetName="HeaderText" Value="SemiBold"/>
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>