我使用WPF创建了一个非常漂亮的Windows 8-ish界面。它已经比我希望的方式更好了,但我想知道以下内容:
以某种方式可以检索用户设置的当前窗口颜色吗?你知道,你可以在右键单击桌面时设置Aero颜色......我的计划是在GUI上使用该颜色作为几个画布元素。
提前致谢!
答案 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
安装软件包后,您可以根据需要参考名为DynamicResource
和AeroColor
的{{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颜色并且颜色如下时,看起来非常酷。