WinUI 3 NavigationView всегда использует цвет фона из операционной системы, а не из выбранной темы приложения

Я использую 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 не меняется правильно, как я описал выше? Спасибо за ваше время.


58
1

Ответ:

Решено

Основываясь на этой проблеме: Программное изменение темы в настольном приложении WinUI 3 preview 3, вы можете установить свойство Фон для корневого элемента следующим образом:

Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}

Корневой элемент — это Grid с x:Name = "Root" в случае вопроса.