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 = 深色。 如果要按不同的顺序放置它们,或使用非单选按钮的 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 属性。

适用于

另请参阅