我使用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}}"
我设法使用下面的代码,以获得正确的色彩: 小旁注:它里面有一个小的修正忽略十六进制数的α位,所以我得到充分的颜色,而不是少一个饱和。
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
安装包后,您可以参考一个DynamicResource
叫AeroColor
和AeroBrush
取决于你所需要的东西。
这里是一个的太需要一些设置代码,但它并不多。 只要把东西在你的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过渡性地改变了航空的颜色和你的颜色如下。