我使用WPF做出了非常漂亮的Windows 8十岁上下的接口。它已经证明的方式比我求之不得,但我想知道以下几点:获取航空窗口颜色
是它在某种程度上可以检索当前窗口的颜色由用户设置的?您知道,当您右键单击桌面时,您可以设置Aero颜色......我的计划是在我的GUI上使用该颜色作为几个画布元素。
在此先感谢!
我使用WPF做出了非常漂亮的Windows 8十岁上下的接口。它已经证明的方式比我求之不得,但我想知道以下几点:获取航空窗口颜色
是它在某种程度上可以检索当前窗口的颜色由用户设置的?您知道,当您右键单击桌面时,您可以设置Aero颜色......我的计划是在我的GUI上使用该颜色作为几个画布元素。
在此先感谢!
您可以查询这个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"));
}
的SystemColours类。您可以直接绑定到它像这样
"{DynamicResource {x:Static SystemColors.WindowColorKey}}"
的绑定而改变非常简单!非常感谢! – X3N0N10
我设法使用下面的代码,以获得正确的色彩: 小旁注:它有一个小的修正它忽略十六进制数的α位,所以我得到的是全彩色,而不是饱和度较低的一种。
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;
我创建了一个开放源码库这个here这也可在的NuGet。
install-package aerocolor-wpf.AeroColor
安装包后,您可以指取决于你需要什么叫AeroColor
和AeroBrush
DynamicResource
。
有是一个的太需要一些设置代码,但它并不多。只需在窗口的事件处理函数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的过渡性地改变了航空的颜色和你的颜色如下。
可能的重复http://stackoverflow.com/questions/628483/how-can-i-set-a-wpf-controls-color-to-a-system-color-programatically-so-that-i – Surfbutler
正确的方法是捏住DwmGetColorizationColor() –