Я использую WinUI 3 с Microsoft App SDK версии 1.0.1.
У меня проблемы с цветом фона элемента NavigationView
(MSDN — вид навигации), который я использую для основной навигации.
Проблема в том, что цвет фона NavigationView
всегда совпадает с цветом фона настроек Windows (я использую Windows 10), т.е. цвет фона темный в «темном режиме» или белый/светло-серый в «светлом режиме» независимо от настройка/тема, которую я использую в самом приложении.
В приложении у меня есть небольшое меню для переключения тем с настройками «светлая», «темная» или «использовать настройки Windows».
Если я использую «светлый» параметр в окнах и меняю тему в приложении со «светлой» на «темную», все элементы моего приложения корректно меняют цвет (т. е. используют темный фон и светлый цвет переднего плана), кроме фона, если NavigationView
, который в этом случае сохраняет свой «светлый» фон.
Интересно, что цвет переднего плана шрифта в этом случае меняется с темного на светлый, что приводит к тому, что NavigationView имеет «светлый» цвет фона и «светлый» цвет переднего плана.
Если настройка Windows «темная», NavigationView
всегда имеет темный цвет фона, независимо от того, изменяю ли я тему приложения на «светлую» или нет.
Это мое главное окно с 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.
Обратите внимание, что Grid
в моем коде XAML выше имеет наборы x:Name = "Root"
.
Итак, _rootElement
, где я применяю тему, — это сетка моего главного окна.
Кто-нибудь знает, почему цвет фона NavigationView
не меняется правильно, как я описал выше?
Спасибо за ваше время.
Основываясь на этой проблеме: Программное изменение темы в настольном приложении WinUI 3 preview 3, вы можете установить свойство Фон для корневого элемента следующим образом:
Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}
Корневой элемент — это Grid
с x:Name = "Root"
в случае вопроса.