如何更改 MahApps TabItem 的文本颜色

How to change text color of a MahApps TabItem

我在 WPF 应用程序中使用 MahApps,并且有几个 TabControls。

我找到了如何更改字体大小:

<TabControl.Resources>
    <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
       <Setter Property="controls:HeaderedControlHelper.HeaderFontSize" Value="12" />
    </Style>
</TabControl.Resources>

我也想修改文字颜色,但是不知道怎么办。

有人能帮帮我吗?

不幸的是,HeaderedControlHelperTabControlHelper都不能用来设置header画笔,因为它们在[默认样式的控件模板中是hard-codedTabItem.

为了更改 header 画笔,您必须复制 default style for TabItem from GitHub 并调整 Foreground 画笔,这决定了您需要的所有控件状态中的文本颜色。设置前景笔刷的部分有五个。

  1. 默认前景,如果没有被任何其他状态覆盖。

    <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Text}" />
    
  2. 选项卡选中状态下的前景画笔。

    <Trigger Property="IsSelected" Value="true">
       <Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
       <Setter TargetName="Underline" Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:TabControlHelper.UnderlineSelectedBrush), Mode=OneWay}" />
    </Trigger>
    
  3. 未选中选项卡时的前景刷。

    <Trigger Property="IsSelected" Value="false">
       <Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="{DynamicResource MahApps.Brushes.Gray}" />
    </Trigger>
    
  4. 当鼠标悬停在选项卡上时前景刷header。

    <Trigger SourceName="Border" Property="IsMouseOver" Value="True">
       <Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="{DynamicResource MahApps.Brushes.Gray.MouseOver}" />
       <Setter TargetName="Underline" Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:TabControlHelper.UnderlineMouseOverBrush), Mode=OneWay}" />
    </Trigger>
    
  5. 当鼠标悬停在选项卡上时前景画笔 header 但未选中。

    <MultiTrigger>
       <MultiTrigger.Conditions>
          <Condition SourceName="Border" Property="IsMouseOver" Value="True" />
          <Condition Property="IsSelected" Value="True" />
       </MultiTrigger.Conditions>
       <Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="{DynamicResource MahApps.Brushes.Highlight}" />
       <Setter TargetName="Underline" Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:TabControlHelper.UnderlineMouseOverSelectedBrush), Mode=OneWay}" />
    </MultiTrigger>
    

将您改编的样式移动到资源字典并通过键显式引用样式或删除 x:Key 使其隐式,以便自动应用于范围内的所有选项卡项。