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 , используемого для шаблонов элементов управления.