获取航空窗口颜色(Get Aero Window Colour)

2019-07-02 17:10发布

我使用WPF做出了非常漂亮的Windows 8十岁上下的接口。 它已经证明的方式比我求之不得,但我想知道以下几点:

是它在某种程度上可以检索当前窗口的颜色由用户设置的? 你知道,你可以设置Aero配色时用鼠标右键单击桌面...我的计划是使用颜色在我的GUI情侣帆布元素。

提前致谢!

Answer 1:

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


Answer 2:

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

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


Answer 3:

我设法使用下面的代码,以获得正确的色彩: 小旁注:它里面有一个小的修正忽略十六进制数的α位,所以我得到充分的颜色,而不是少一个饱和。

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;


Answer 4:

我创造了这样的一个开放源码库在这里它也可上的NuGet。

install-package aerocolor-wpf.AeroColor

安装包后,您可以参考一个DynamicResourceAeroColorAeroBrush取决于你所需要的东西。

这里是一个的太需要一些设置代码,但它并不多。 只要把东西在你的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过渡性地改变了航空的颜色和你的颜色如下。



文章来源: Get Aero Window Colour
标签: c# wpf xaml aero