我正在使用Windows.UI.ViewManagement.UISettings
获取系统强调颜色,但似乎此类没有任何方法或属性用于亮/暗模式。我找不到此功能的文档,如何检测到这个?
PS:我正在创建一个无法访问Windows.UI.Xaml
命名空间的JS应用程序。
答案 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
枚举实际上有三个值 - Dark
,Light
和Default
。 Default
是反映系统设置的值,Dark
和Light
强制主题。
如果您想要在应用RequestedTheme
为Default
时实际检测代码中的当前主题,您可能需要检查某些颜色资源,例如SystemAltHighColor
值,因为这会让你知道当前设置的主题。
答案 3 :(得分:0)
ThemeResources 已在8.1中引入,其行为在W10中类似。因此,您可以在负责可用主题的 ThemeDictionaries 中定义合适的资源,然后当您想知道当前哪个主题时,您可以检查已定义的资源用过的。
代码与this answer中的代码非常相似。
答案 4 :(得分:0)
对于Windows 10,注册表路径AppsUseLightTheme
中HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize
属性的值指定Windows在暗或亮模式下的位置。
答案 5 :(得分:0)
如果要在PowerShell中获取值,可以使用以下代码:
(New-Object Windows.UI.ViewManagement.UISettings).GetColorValue("background")