Application.RequestedTheme 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值确定应用整体主题的深浅首选项。
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 = 深色。 如果要按不同的顺序放置它们,或使用非单选按钮的 UI,则需要相应地修改代码。
<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
属性以替代用户默认值并指定使用的主题。 如果你提供 UI 以允许用户为应用选择浅色或深色主题,则你还应提供一个选项来切换回使用默认值,即在 Windows 个性化设置中选择的选项。
只能在应用启动时设置主题,而不能在应用运行时设置。 尝试在应用运行时设置 RequestedTheme
会引发 Microsoft .NET 代码) NotSupportedException
(异常。 如果为用户提供选择属于应用 UI 的主题的选项,则必须在应用数据中保存设置,并在应用重启时应用该设置。 (有关应用设置的详细信息,请参阅 存储和检索设置和其他应用数据) 。
如果使用 FrameworkElement.RequestedTheme 属性并在 UI 中的特定元素上设置值,则可以在应用后Application.RequestedTheme
在运行时更改特定主题值。
还有一个使用系统值的“HighContrast”主题,但应用和应用代码使用不同的技术将应用切换到高对比度。
RequestedTheme
如果用户在高对比度模式下运行,则忽略 属性。 请参阅 对比度主题 和 XAML 高对比度示例。
尽管应用无法在运行时切换主题,但用户可以。 例如,用户可能会在应用运行时使用 Alt+Shift+PrtScn 键快捷方式启用高对比度主题。 如果发生这种情况,XAML 资源系统将重新计算任何 {ThemeResource} 标记扩展 使用的资源值。 然后,针对主题的资源(如颜色和画笔)使用适合当前主题的值,即使最初请求该主题的不是应用。
特定于主题的资源通常在 XAML 中的单独资源字典中定义。 此资源字典来自用于控件模板的主 ResourceDictionary 的 ThemeDictionaries 属性。