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.
Примеры
В этом примере показано, как сохранить запрошенную тему в параметрах локального приложения, а затем получить и применить ее при перезапуске приложения.
Внимание!
Этот упрощенный пример зависит от порядка параметров переключателя 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 , используемого для шаблонов элементов управления.