如何在NavigationView中设置文本的前景色?

时间:2017-12-14 23:09:16

标签: c# xaml uwp

我正在尝试更改NavigationView的颜色。 documentation给出了如何更改背景的一个很好的示例,但我找不到如何更改菜单项的字体颜色。 我还能够使用<SolidColorBrush x:Key="SystemControlForegroundAccentBrush" Color="#FFFFFFFF" />

更改选择指标的颜色

2 个答案:

答案 0 :(得分:4)

NavigationView是自动使用 Reveal highlight 的众多控件之一,它也是新的Fluent Design System组件之一,其目标是为应用程序添加光。

@A。如果我们处理的控件没有NavigationViewItem那么多的状态,那么Milto解决方案就可以工作,但是NavigationMenuItem有:

  • PointerOver;
  • 选择的;
  • PointerOverSelected;
  • PressedSelected;

没有考虑到它的禁用状态。 只需将前景属性强制为所需的颜色,将提供以下内容:

enter image description here

实现您的意图的最简单的解决方案是覆盖NavigationViewItem模板中的资源,您可以在 generic.xaml 中实际检查这些资源。你可以这样做:

        <Grid.Resources>
            <SolidColorBrush x:Key="NavigationViewItemForegroundPointerOver" Color="Red"/>
            <SolidColorBrush x:Key="NavigationViewItemForegroundSelected" Color="Red"/>
            <SolidColorBrush x:Key="NavigationViewItemForegroundSelectedPointerOver" Color="Red"/>
            <SolidColorBrush x:Key="NavigationViewItemForegroundPressed" Color="Red"/>
            <SolidColorBrush x:Key="NavigationViewItemForegroundSelectedPressed" Color="Red"/>
        </Grid.Resources>

如果您想要将NavigationViewItem内容的初始状态和图标设置为红色,则必须在标记中设置它。

这是用于填充 NavigationView.MenuItems

的项目列表
            <NavigationView.MenuItems>
                <NavigationViewItem Icon="AllApps" FontWeight="Bold" Foreground="Red"  Content="Apps" Tag="apps"/>
                <NavigationViewItem Icon="Video" FontWeight="Bold" Foreground="Red" Content="Games" Tag="games" />
                <NavigationViewItem Icon="Audio" FontWeight="Bold" Content="Music" Tag="music"/>
            </NavigationView.MenuItems>

结果:

enter image description here

通过此实现, Foreground Border / Background 分开,这是负责表征Reveal功能的其他元素。

您可以修改上面提到的资源器来实现您自己的UI逻辑,比我们现在实现的更加“漂亮”,甚至使用绑定来改变运行时的主题,具体取决于您应用的自定义主题报价。

修改 要为所有NavigationViewMenuItems设置Foreground属性(包括设置),请覆盖以下资源:

<SolidColorBrush x:Key="NavigationViewItemForeground" Color="Red"/>

使用此功能,您无需为所有项目明确设置前景。使用NavigationView的SettingsItem属性,我只设法更改图标颜色。

答案 1 :(得分:0)

像这样:

<NavigationView ...>
    ...
    <NavigationView.MenuItemContainerStyle>
        <Style TargetType="NavigationViewItem">
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </NavigationView.MenuItemContainerStyle>
    ...
</NavigationView>