如何在Windows 10周年更新或更高版本中使用WPF应用程序中的浅色或深色主题?

时间:2017-06-23 05:04:55

标签: c# wpf windows-10

我已经编写了一个WPF桌面应用程序,我希望使用Desktop Bridge将其放入Windows应用商店。该应用程序能够在明暗模式下呈现自己,并使用强调色。但是,要成为Windows 10的好公民,我希望尽可能从操作系统获取该信息。

我目前的理解是,我可以从这里获得强调色:

var accentBrush = SystemParameters.WindowGlassBrush;

如何判断Windows 10是处于浅色还是黑暗主题?另外,您建议使用哪种方法来通知用户对亮/暗或强调色的偏好的变化?

3 个答案:

答案 0 :(得分:4)

只要Windows 10周年更新或更高版本中的此亮/暗模式设置发生更改,就会更新注册表值。关键是:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize

值的名称是:

AppsUseLightTheme

如果是1,那么主题是Light。如果是0,则主题为黑暗。如果我找不到密钥或值,我会假设Light(就像之前版本的Windows一样)。

就我而言,林德西值得赞扬。如果没有这个评论,我就不会进行调查。

答案 1 :(得分:1)

一些简单的代码为您提供普通WPF应用(而非UWP)中的轻量级模式。 从未在高对比度模式下进行过测试。 如果该值不存在或出了点问题,则采用光模式。

bool is_light_mode = true;
try
{
    var v = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme", "1");
    if (v != null && v.ToString() == "0")
        is_light_mode = false;
}
catch { }

答案 2 :(得分:0)

某些用户可能具有自定义设置。类似于 Dark App模式 Light System模式。如果用户具有 Light System模式,它将使任务栏和“开始”菜单变为浅色。

Screenshot for custom Light/Dark theme settings

就像@Daniel Henry所说的那样,AppsUseLightTheme值名称告诉Light / Dark App模式。同样,SystemUsesLightTheme值名称说明了明暗系统模式。这对于具有系统任务栏图标并希望使其任务栏图标清晰可见的应用程序很有帮助。