如何检测Windows 10亮/暗模式?

时间:2016-08-03 04:48:28

标签: windows uwp windows-10-universal

我正在使用Windows.UI.ViewManagement.UISettings获取系统强调颜色,但似乎此类没有任何方法或属性用于亮/暗模式。我找不到此功能的文档,如何检测到这个?

PS:我正在创建一个无法访问Windows.UI.Xaml命名空间的JS应用程序。

6 个答案:

答案 0 :(得分:12)

您可以从解访问Windows.UI.Xaml命名空间的解决方案中创建Windows运行时组件项目。添加一个方法来检查当前的ApplicationTheme。

public sealed class Test
{
    public static string CurrentTheme()
    {
        var isDark = Application.Current.RequestedTheme == ApplicationTheme.Dark;

        if (isDark)
            return "Dark";

        return "Light";
    }
}

在javascript应用程序项目中添加对Windows运行时组件项目的引用,您可以在任何想要检查应用程序主题的位置调用此方法。查看here以了解有关创建Windows运行时组件的演练。

答案 1 :(得分:7)

我找到了一个更简单的解决方案,它也适用于JavaScript应用程序,而不需要Windows运行时组件 - UISettings class

var uiSettings = new Windows.UI.ViewManagement.UISettings();
var color = uiSettings.getColorValue(
                        Windows.UI.ViewManagement.UIColorType.background
                       );

对于深色主题,您获得的颜色为黑色;对于光线主题,颜色为白色

该课程还有非常有用的活动ColorValuesChanged,您可以将其用于observe theme changes at runtime

答案 2 :(得分:3)

在Windows周年更新之前,您无法做到这一点。应用程序主题始终是您在App.xaml文件中设置的主题:

<Application
  ...
  RequestedTheme="Dark">
</Application>

现在使用新的周年纪念更新,您可以从App.xaml文件中删除此行,这将使该应用程序兑现用户的系统设置。

RequestedTheme枚举实际上有三个值 - DarkLightDefaultDefault是反映系统设置的值,DarkLight强制主题。

如果您想要在应用RequestedThemeDefault时实际检测代码中的当前主题,您可能需要检查某些颜色资源,例如SystemAltHighColor值,因为这会让你知道当前设置的主题。

答案 3 :(得分:0)

ThemeResources 已在8.1中引入,其行为在W10中类似。因此,您可以在负责可用主题 ThemeDictionaries 中定义合适的资源,然后当您想知道当前哪个主题时,您可以检查已定义的资源用过的。

代码与this answer中的代码非常相似。

答案 4 :(得分:0)

对于Windows 10,注册表路径AppsUseLightThemeHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize属性的值指定Windows在暗或亮模式下的位置。

答案 5 :(得分:0)

如果要在PowerShell中获取值,可以使用以下代码:

(New-Object Windows.UI.ViewManagement.UISettings).GetColorValue("background")