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 设置中设置的默认主题。

示例

此示例演示如何将请求的主题保存在本地应用设置中,然后在应用重启时检索并应用它。

<ToggleSwitch Header="Theme" OnContent="Light" OffContent="Dark"
              Toggled="ToggleSwitch_Toggled" Loaded="ToggleSwitch_Loaded"/>
private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)
{
    // Save theme choice to LocalSettings. 
    // ApplicationTheme enum values: 0 = Light, 1 = Dark
    ApplicationData.Current.LocalSettings.Values["themeSetting"] =
                                                     ((ToggleSwitch)sender).IsOn ? 0 : 1;
}

private void ToggleSwitch_Loaded(object sender, RoutedEventArgs e)
{
    ((ToggleSwitch)sender).IsOn = App.Current.RequestedTheme == ApplicationTheme.Light;
}

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.
        App.Current.RequestedTheme = (ApplicationTheme)(int)value;
    }
}

注解

有两个内置主题:“浅色”和“深色”。 默认情况下,你的应用使用用户在 Windows 设置 (设置 > 中设置的主题运行个性化 > 颜色 > 选择默认应用模式) 。 你可以设置应用的 RequestedTheme 属性以替代用户默认值并指定使用的主题。

只能在应用启动时设置主题,而不能在应用运行时设置。 尝试在应用运行时设置 RequestedTheme 会引发异常 (Microsoft .NET 代码) NotSupportedException 。 如果为用户提供选择属于应用 UI 的主题的选项,则必须在应用数据中保存设置,并在应用重启时应用该设置。 (有关应用设置的详细信息,请参阅 存储和检索设置和其他应用数据) 。

如果使用 FrameworkElement.RequestedTheme 属性并在 UI 中的特定元素上设置值,则可以在应用 Application.RequestedTheme 之后在运行时更改特定主题值。

还有一个使用系统值的“HighContrast”主题,但应用和应用代码使用不同的技术将应用切换到高对比度。 如果用户在高对比度模式下运行,则忽略 RequestedTheme 属性。 请参阅 高对比度主题XAML 高对比度样式示例

尽管应用无法在运行时切换主题,但用户可以从Windows 8.1) 开始 (。 例如,用户可能会在应用运行时使用 Alt+Shift+PrtScn 键快捷方式启用高对比度主题。 如果发生这种情况,XAML 资源系统将重新计算任何 {ThemeResource} 标记扩展 使用的资源值。 然后,针对主题的资源(如颜色和画笔)使用适合当前主题的值,即使最初请求该主题的不是应用。

特定于主题的资源通常在 XAML 中的单独资源字典中定义。 此资源字典来自用于控件模板的主 ResourceDictionary 的 ThemeDictionaries 属性。 特定于主题的资源的默认系统资源字典名为 ThemeResources.xaml。 此文件在 Windows 软件开发工具包 (SDK) 安装的 (Program Files) \Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP<SDK version>\Generic 文件夹中可用。

以前版本的说明

Windows 8.x 默认情况下,应用使用 themeresources.xaml 文件中的“深色”主题 (运行,“深色”资源的键名称为“Default”) 。

  • 在 Windows 上,将 RequestedTheme 设置为 ElementTheme.Default 将始终导致主题为“深色”。
  • 在Windows Phone,使用 ElementTheme.Default 值将导致查询用户设置的系统主题。

适用于

另请参阅