WinUI 3 NavigationView 始终使用操作系统的背景色,而不是所选应用主题的背景色

WinUI 3 NavigationView always uses background color from operating system, not from the selected app theme

我正在使用带有 Microsoft App SDK 版本 1.0.1 的 WinUI 3。

我对用于主导航的 NavigationView (MSDN - NavigationView) 元素的背景颜色有疑问。

问题是NavigationView的背景色一直是windows设置的背景色(我用的是windows10),即背景色是暗的“深色模式”或“浅色模式”中的白色/浅灰色独立于我在应用程序本身中使用的设置/主题。

在应用程序中,我有一个用于切换主题的小菜单,设置为“浅色”、“深色”或“使用 windows 设置”。

如果我在 windows 中使用“浅色”设置并将应用程序中的主题从“浅色”更改为“深色”,我的应用程序的所有元素都会正确更改颜色(即使用深色背景和浅色前景色),如果 NavigationView 在这种情况下保持其“浅色”背景的背景除外。 有趣的是,在这种情况下,字体的前景色确实会从深色变为浅色,这会导致 NavigationView 具有“浅色”背景色和“浅色”前景色。

如果 windows 设置为“深色”,则 NavigationView 的背景颜色始终为深色,无论我是否将应用程序主题更改为“浅色”。

这是我的主要 window,顶部的 NavigationView(我删除了不相关的部分):

<Window>
    <Grid x:Name="Root" x:FieldModifier="Internal">

        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <!-- https://docs.microsoft.com/en-us/windows/apps/design/controls/navigationview -->
        <NavigationView x:Name="navigationView" PaneDisplayMode="Top" 
                        IsBackEnabled="True" IsBackButtonVisible="Collapsed" BackRequested="NavigationView_OnBackRequested"
                        SelectionChanged="NavigationView_OnSelectionChanged"
        >
        <NavigationView.MenuItems>
            <NavigationViewItem  Content="A" />
            <NavigationViewItem  Content="B" />
            <NavigationViewItem  Content="C" />
        </NavigationView.MenuItems>

    </NavigationView>


    </Grid>
</Window>

这是我在我的应用中设置主题的代码:

    public async Task SetThemeAsync(ElementTheme theme)
    {
        _rootElement.RequestedTheme = theme;
    }

_rootElement 指向 App.NavigationRootWindow.Root。 请注意上面我的 XAML 代码中的 Grid 有集合 x:Name="Root"。 所以我应用主题的 _rootElement 是我的主要 window.

的网格

有谁知道为什么 NavigationView 的背景颜色没有像我上面描述的那样正确更改? 谢谢你的时间。

基于这个问题:Change theme programmatically in WinUI 3 preview 3 desktop application,您可以像这样在根元素上设置 Background 属性:

Background="{ThemeResource ApplicationPageBackgroundThemeBrush}

根元素是 Gridx:Name="Root" 在问题的情况下。