更改非活动选项卡 header 字体颜色

Change inactive tab header font color

我正在使用 MahApps.Metro 选项卡控件。我想知道是否可以在选项卡处于非活动状态时更改 header 文本的字体颜色。

目前是这样的:

我可以使用以下方法更改活动选项卡的字体颜色:

        <Controls:MetroAnimatedSingleRowTabControl.Resources>
            <SolidColorBrush x:Key="AccentColorBrush" Color="Red"/>
        </Controls:MetroAnimatedSingleRowTabControl.Resources>

但我无法更改非活动标签的颜色。我想将灰色更改为其他颜色;例如让我们说绿色。有可能改变吗?

MahApps.Metro TabItem template 使用带有 "GrayNormalBrush" 键的动态资源作为非活动时的字体颜色。因此,您需要做的就是提供您喜欢的 Brush 作为该密钥的资源。根据您要进行的更改范围,您必须选择合适的位置来放置画笔。

换单TabItem

要更改单个 TabItem 上的非活动画笔,请将画笔放入其资源字典中:

<TabItem>
    <TabItem.Resource>
        <SolidColorBrush x:Key="GrayNormalBrush" Color="Red" />
    </TabItem.Resources>
</TabItem>

在单个 TabControl

中更改所有 TabItem

要修改 TabControl 中的所有 TabItem,您应该覆盖 TabItem 的默认样式,将画笔放入其资源字典中,并将该样式作为 TabControl的资源:

<TabControl>
    <TabControl.Resources>
        <!-- It's important to set the BasedOn property so that we
             override the style rather than redefine it -->
        <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
            <Style.Resources>
                <SolidColorBrush x:Key="GrayNormalBrush" Color="Red" />
            </Style.Resources>
        </Style>
    </TabControl.Resources>
</TabControl>

您还可以将样式向上移动层次结构以扩大其范围,例如如果将该样式作为 Window 的资源,则 window 中的所有 TabItem 都将被修改。

更改整个应用程序中的所有 TabItems

事实证明,这部分比仅将样式放入 App.xaml 资源字典要复杂一些。这里的关键是这种风格应该在 after 被引用 MahApps.Metro 之后定义。就我而言,当我在 App.xaml 中有 MahApps.Metro 词典引用并将该样式放在那里时,第一个 TabItem 根本没有 的样式,而下面的那些都很好,花花公子。

诀窍是在一个单独的文件中创建一个字典,比如说 Resources.xaml,把那个样式放在那里,然后从 App.xaml。请注意,字典的引用顺序对于此解决方案的工作至关重要:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="Resources.xaml" />
            ...
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>