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}
根元素是 Grid
和 x:Name="Root"
在问题的情况下。
我正在使用带有 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}
根元素是 Grid
和 x:Name="Root"
在问题的情况下。