我用WPF做了一个相当漂亮的Windows8界面。它已经比我希望的要好得多了,但我想知道以下几点:
是否可以以某种方式检索用户设置的当前窗口颜色?你可以在右击桌面时设置Aero颜色...我的计划是将这种颜色用于GUI上的几个画布元素。
提前感谢!
发布于 2012-10-26 21:08:45
您可以查询ColorizationColor注册表项。
我甚至更进一步,创建了一个获取十六进制颜色值的方法,希望这能对你有所帮助:
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"));
}发布于 2012-10-26 21:56:28
SystemColours类正是为了这个目的而存在的。您可以像这样直接绑定到它
"{DynamicResource {x:Static SystemColors.WindowColorKey}}"发布于 2012-10-29 18:34:53
我设法使用以下代码获得了正确的颜色:小sidenote:它有一个小的校正,忽略了十六进制数字的alpha位,所以我得到了完整的颜色,而不是饱和度较低的颜色。
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;https://stackoverflow.com/questions/13085959
复制相似问题