获取航空窗口颜色

我使用WPF创建了一个非常漂亮的Windows 8-ish界面。 它已经比我希望的方式更好了,但我想知道以下内容:

以某种方式可以检索用户设置的当前窗口颜色吗? 您知道,右键单击桌面时可以设置Aero颜色…我的计划是在GUI上使用该颜色作为几个canvas元素。

提前致谢!

您可以查询ColorizationColor注册表项。

我甚至更进了一步,创建了一个获取hex颜色值的方法,希望这可以帮助你:

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}", cRToString("X2"), cGToString("X2"), cBToString("X2")); } 

SystemColours类就是出于此目的而存在的。 你可以像这样直接绑定它

 "{DynamicResource {x:Static SystemColors.WindowColorKey}}" 

我设法使用以下代码获得正确的颜色: 小旁注:它有一个小的修正,忽略hex数字的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; 

我在这里创建了一个开源库,它也可以在NuGet上使用。

install-package aerocolor-wpf.AeroColor

安装软件包后,您可以根据需要参考名为AeroColorAeroBrushDynamicResource

还有一些需要的设置代码,但它并不多。 只需在窗口的Loaded事件处理程序中添加一些内容,如下所示。

 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Loaded += MainWindow_Loaded; } void MainWindow_Loaded(object sender, RoutedEventArgs e) { AeroResourceInitializer.Initialize(); } } 

这个库的巧妙之处在于它也安装了一个钩子,它也会更新这些资源,因为系统中的实际Aero颜色也会发生变化。 这意味着您也不必处理它,如果您使用DynamicResource指向XAML中的颜色而不是StaticResource ,WPF也会自动更新UI中的颜色。

当Windows 8过渡地更改Aero颜色并且颜色如下时,看起来非常酷。