获取航空窗口颜色

时间:2012-10-26 11:19:36

标签: c# wpf xaml aero

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

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

提前致谢!

4 个答案:

答案 0 :(得分:5)

出于此目的,存在SystemColours类。您可以像这样直接绑定到它

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

答案 1 :(得分:4)

您可以查询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"));
}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

install-package aerocolor-wpf.AeroColor

安装软件包后,您可以根据需要参考名为DynamicResourceAeroColor的{​​{1}}。

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

Loaded

这个库的巧妙之处在于它也安装了一个钩子,它也会更新这些资源,因为系统中的实际Aero颜色也会发生变化。这意味着您也不必处理它,如果您使用public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Loaded += MainWindow_Loaded; } void MainWindow_Loaded(object sender, RoutedEventArgs e) { AeroResourceInitializer.Initialize(); } } 指向XAML中的颜色而不是DynamicResource,WPF也会自动更新UI中的颜色

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