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

C# 如何在NavigationView中设置文本的前景色?,c#,xaml,uwp,C#,Xaml,Uwp,我正在尝试更改导航视图的颜色。提供了一个很好的例子,说明如何更改背景,但我找不到如何更改菜单项的字体颜色。 我还可以使用如下方式更改选择指示器的颜色: <NavigationView ...> ... <NavigationView.MenuItemContainerStyle> <Style TargetType="NavigationViewItem"> <Setter Property="Fo

我正在尝试更改
导航视图
的颜色。提供了一个很好的例子,说明如何更改背景,但我找不到如何更改菜单项的字体颜色。 我还可以使用如下方式更改选择指示器的颜色:

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

...
...

NavigationView是自动使用“显示高光”的众多控件之一,它也是新的Fluent Design系统组件之一,其目标是为应用程序添加灯光

@A.如果我们处理的控件不像NavigationViewItem共享那么多的状态,那么Milto解决方案会起作用,但是NavigationMenuItem有:

  • 指针式
  • 压制
  • 选定的
  • 点选
  • 按Selected
不考虑它的禁用状态。 只需将“前景”属性强制设置为所需颜色,即可获得以下结果:

要实现您的目的,最简单的解决方案是覆盖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的项目列表


结果:

通过该实现,前景与边界/背景分离,边界/背景是负责揭示特征特征的其他元素

您可以修改上面提到的资源来实现您自己的UI逻辑,比我们现在实现的UI逻辑更“漂亮”,甚至可以使用绑定在运行时根据您的应用程序可能提供的自定义主题来更改主题

编辑: 要为所有NavigationViewMenuItems(包括设置)设置前台属性,请覆盖以下资源:

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


这样,您就不需要为所有项目显式设置前景。使用NavigationView的
SettingsItem
属性,我只能更改图标颜色。

只能部分工作<代码>前景在选中时返回默认值。此外,设置菜单项不受此更改的影响。它是否也会更改设置样式?我没有尝试过,但如果不是这样,我也不会感到惊讶,因为设置似乎是一个独特的菜单项。但是查看generic.xaml,您很可能会得到答案!或者它可能真的有效,而我只是胡说八道!我现在使用的电脑是Windows 10周年更新版本,所以没有办法实际测试。正如你所说,设置是特殊的。可能它不是NavigationViewItem,否则,它应该已更改。我将查看generic.xaml以找到线索。我想补充一点,如果您将navigationView的布局更改为顶部,则需要在每个单词之前添加一个“顶部”单词前缀,例如:“TopNavigationViewItemForegroundPointerOver”
<SolidColorBrush x:Key="NavigationViewItemForeground" Color="Red"/>