首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取Aero窗口颜色

获取Aero窗口颜色
EN

Stack Overflow用户
提问于 2012-10-26 19:19:36
回答 4查看 3.3K关注 0票数 3

我用WPF做了一个相当漂亮的Windows8界面。它已经比我希望的要好得多了,但我想知道以下几点:

是否可以以某种方式检索用户设置的当前窗口颜色?你可以在右击桌面时设置Aero颜色...我的计划是将这种颜色用于GUI上的几个画布元素。

提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-26 21:08:45

您可以查询ColorizationColor注册表项。

我甚至更进一步,创建了一个获取十六进制颜色值的方法,希望这能对你有所帮助:

代码语言:javascript
复制
public void SomeMethod()
{
    int argbColor = (int)Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM","ColorizationColor", null);
    var color = System.Drawing.Color.FromArgb(argbColor);
    string hexadecimalColor = ConverterToHex(color);
}


private static String ConverterToHex(System.Drawing.Color c)
{
    return String.Format("#{0}{1}{2}", c.R.ToString("X2"), c.G.ToString("X2"), c.B.ToString("X2"));
}
票数 4
EN

Stack Overflow用户

发布于 2012-10-26 21:56:28

SystemColours类正是为了这个目的而存在的。您可以像这样直接绑定到它

代码语言:javascript
复制
"{DynamicResource {x:Static SystemColors.WindowColorKey}}"
票数 5
EN

Stack Overflow用户

发布于 2012-10-29 18:34:53

我设法使用以下代码获得了正确的颜色:小sidenote:它有一个小的校正,忽略了十六进制数字的alpha位,所以我得到了完整的颜色,而不是饱和度较低的颜色。

代码语言:javascript
复制
string colorizationValue = string.Format("{0:x}", Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM", "ColorizationColor", "00000000"));
StringBuilder bl = new StringBuilder(colorizationValue);
bl[0] = 'd';
bl[1] = '9';
colorizationValue = bl.ToString();

BrushConverter bc = new BrushConverter();
Brush brush = (Brush)bc.ConvertFrom("#" + colorizationValue);
cvs_barColor.Background = brush;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13085959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档