【问题标题】:How to change text color of a MahApps TabItem如何更改 MahApps TabItem 的文本颜色
【发布时间】:2021-03-27 02:57:45
【问题描述】:

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

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

谁能帮帮我?

【问题讨论】:

    标签: c# wpf xaml mahapps.metro tabitem


    【解决方案1】:

    不幸的是,HeaderedControlHelperTabControlHelper 都不能用于设置标题画笔,因为它们在 TabItem 的默认样式的控件模板中是硬编码的。

    为了更改标题画笔,您必须复制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. 当鼠标悬停在标签页眉上时的前景画笔。

      <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. 当鼠标悬停在选项卡标题上但未被选中时的前景画笔。

      <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 使其隐含,以便自动应用于范围内的所有选项卡项。

    【讨论】:

    • 您好,感谢您的回答。我尝试将其添加为字典资源,但在仅添加字典资源后进行编译时出现大量错误:“clr-namespace:MahApps.Metro.Controls”命名空间中不存在名称“TabControlHelper”。
    • @WalterFabioSimoni 如果将样式直接复制到资源字典中,则应添加 xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" 作为命名空间,这样可以解决大多数错误。 converters:IsNullConverter.Instance 的最后四个错误通过将 converters 前缀替换为 mah 来解决。
    • 谢谢,很遗憾我做到了 xmlns:behaviors="clr-namespace:MahApps.Metro.Behaviors" & xmlns:converters="clr-namespace:MahApps.Metro.Converters " 命名空间,甚至使用 mah.IsNullConverter.Instance
    • @WalterFabioSimoni Here 是一个没有错误的改编样本。忽略或删除 local 命名空间。试试看它是否有效,如果无效,你会得到什么错误?
    • 非常感谢,一切正常 :) 感谢您的帮助。 MahApps 非常好,可惜我们无法使用这些方式直接修改这些属性。也许在未来?再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多