Application.RequestedTheme Свойство

Определение

Возвращает или задает значение, определяющее светло-темные предпочтения для общей темы приложения.

public:
 property ApplicationTheme RequestedTheme { ApplicationTheme get(); void set(ApplicationTheme value); };
ApplicationTheme RequestedTheme();

void RequestedTheme(ApplicationTheme value);
public ApplicationTheme RequestedTheme { get; set; }
var applicationTheme = application.requestedTheme;
application.requestedTheme = applicationTheme;
Public Property RequestedTheme As ApplicationTheme
<Application RequestedTheme="applicationThemeMemberName" .../>

Значение свойства

Значение перечисления. Начальное значение — это тема по умолчанию, заданная пользователем в параметрах Windows.

Примеры

В этом примере показано, как сохранить запрошенную тему в параметрах локального приложения, а затем получить и применить ее при перезапуске приложения.

Caution

Этот упрощенный пример зависит от порядка параметров переключателя, соответствующих ApplicationTheme значениям перечисления: 0 = Свет, 1 = Темный. Если вы хотите поместить их в другой порядок или использовать пользовательский интерфейс, отличный от переключателей, вам потребуется изменить код соответствующим образом.

<RadioButtons Header="App theme"
              SelectionChanged="AppTheme_SelectionChanged"
              Loaded="RadioButtons_Loaded">
    <x:String>Light</x:String>
    <x:String>Dark</x:String>
    <x:String>Use system setting</x:String>
</RadioButtons>
private void AppTheme_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (sender is RadioButtons rb)
    {
        // Save theme choice to LocalSettings. 
        // ApplicationTheme enum values: 0 = Light, 1 = Dark
        ApplicationData.Current.LocalSettings.Values["themeSetting"] = rb.SelectedIndex;
    }
}

private void RadioButtons_Loaded(object sender, RoutedEventArgs e)
{
    if (sender is RadioButtons rb)
    {
        // Set the RadioButtons selection to the saved value.
        rb.SelectedIndex = (int)ApplicationData.Current.LocalSettings.Values["themeSetting"];
    }
}

App.xaml.cs

public App()
{
    this.InitializeComponent();

    // Get theme choice from LocalSettings.
    object value = ApplicationData.Current.LocalSettings.Values["themeSetting"];

    if (value != null)
    {
        // Apply theme choice if saved value is Light or Dark.
        // Otherwise, don't set it and the Windows Personalization setting is used. 
        if ((int)value == 0 || (int)value == 1)
        {
            App.Current.RequestedTheme = (ApplicationTheme)(int)value;
        }
    }
}

Комментарии

Существует два встроенных темы: "Свет" и "Темная". По умолчанию приложение выполняется с помощью темы, заданной пользователем в параметрах Windows (параметры > персонализации > цвета > выберите режим приложения по умолчанию). Свойство приложения RequestedTheme можно задать для переопределения пользователя по умолчанию и указать, какая тема используется. Если вы предоставляете пользовательский интерфейс, чтобы пользователь выбрал светлую или темную тему для приложения, вы также должны предоставить возможность вернуться к использованию по умолчанию, то есть параметр, выбранный в параметрах персонализации Windows.

Тема может быть задана только при запуске приложения, а не во время его выполнения. При попытке задать RequestedTheme время выполнения приложения возникает исключение (NotSupportedExceptionдля Microsoft .NET кода). Если пользователь может выбрать тему, которая является частью пользовательского интерфейса приложения, необходимо сохранить параметр в данных приложения и применить его при перезапуске приложения. (Дополнительные сведения о параметрах приложения см. в магазине и получении параметров и других данных приложения).

Вы можете изменить значения конкретной темы во время выполнения после Application.RequestedTheme применения, если вы используете свойство FrameworkElement.RequestedTheme и задаете значения для определенных элементов в пользовательском интерфейсе.

Существует также тема HighContrast, которая использует системные значения, но приложения и код приложения используют другой способ переключения приложения на высокий контраст. Свойство RequestedTheme игнорируется, если пользователь работает в режиме высокой контрастности. См . статью "Темы контрастности " и пример высокой контрастности XAML.

Хотя приложение не может переключать темы во время выполнения, пользователь может. Например, пользователь может включить тему высокой контрастности во время работы приложения с помощью сочетания клавиш ALT+SHIFT+PrtScn. В этом случае система ресурсов XAML пересчитывает значения ресурсов для любого расширения разметки {ThemeResource} . Соответствующие темы ресурсы, такие как цвета и кисти, затем используют значения, соответствующие текущей теме, даже если это не приложение, которое запрашивает эту тему первоначально.

Ресурсы, относящиеся к теме, обычно определяются в отдельном словаре ресурсов в XAML. Этот словарь ресурсов поступает из свойства ThemeDictionaries основного resourceDictionary , используемого для шаблонов элементов управления.

Применяется к

См. также раздел