我正在使用带有Microsoft应用程序SDK版本1.0.1的WinUI 3。
我对用于主导航的NavigationView
(MSDN - 导航视图) 元素的背景颜色有问题。
问题是NavigationView
的背景颜色始终是窗口设置的背景颜色(我使用 windows 10),即背景颜色在"深色模式"下为深色或在"浅色模式"下为白色/浅灰色,与我在应用程序本身中使用的设置/主题无关。
在应用程序中,我有一个小菜单来切换主题,设置"浅","暗"或"使用窗口设置"。
如果我在窗口中使用"浅色"设置并将应用程序中的主题从"浅色"更改为"深色">,则应用程序的所有元素都会相应地更改颜色(即使用深色背景和浅色前景色),如果在这种情况下保持其"浅色"背景的NavigationView
除外。 有趣的是,在这种情况下,字体的前景色确实从深色变为浅色,这会导致 NavigationView 具有"浅色"背景色和"浅色"前景色。
如果 windows 设置为"深色",则无论我是否将应用程序主题更改为"浅色",NavigationView
都具有始终深色的背景色。
这是我的主窗口,NavigationView
位于顶部(我删除了不相关的部分):
<Window>
<Grid x:Name="Root" x:FieldModifier="Internal">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- https://learn.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
是主窗口的网格。
有谁知道为什么NavigationView
的背景颜色没有像我上面描述的那样正确更改? 谢谢你的时间。
基于此问题:在 WinUI 3 预览版 3 桌面应用程序中以编程方式更改主题,可以在根元素上设置"背景"属性,如下所示:
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}
根元素是带有问题时x:Name="Root"
的Grid
。