如何获取Windows 10的强调色?

4

我正在寻找一种方法,可以根据以下所示的背景图像自动选择的颜色。

enter image description here

我尝试过搜索并找到了:

var color = (Color)this.Resources["SystemAccentColor"];

并且

var color = (Color)Application.Current.Resources["SystemAccentColor"];

但两者都抛出了异常

System.Exception
  HResult=0x8000FFFF
  Message=Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>


我强烈建议在您在stackoverflow发布问题时包含实际的异常类型+消息。这表明您已经付出了一些诊断问题的努力,并避免忽略一些显而易见的问题。 - C.Evenhuis
你能同时发布内部异常和堆栈跟踪吗? - Emond
@Erno de Weerd,我是一个相当新手的程序员,不确定什么是内部异常,但我现在正在添加完整的细节。 - master_ruko
这个回答解决了你的问题吗?C#控制台获取Windows 10强调色 - GSerg
1个回答

5
您将只在此代码中获得十六进制颜色:
Application.Current.Resources["SystemAccentColor"]

您需要将其转换为可用的颜色格式,以下是解决方案。
var color = Application.Current.Resources["SystemAccentColor"];
btnTest.Background = GetColorFromHex(color.ToString());

以下是转换函数:

public static SolidColorBrush GetColorFromHex(string hexaColor)
{
    return new SolidColorBrush(
        Color.FromArgb(
        Convert.ToByte(hexaColor.Substring(1, 2), 16),
        Convert.ToByte(hexaColor.Substring(3, 2), 16),
        Convert.ToByte(hexaColor.Substring(5, 2), 16),
        Convert.ToByte(hexaColor.Substring(7, 2), 16)
    ));
}

谢谢,但是你的示例中第一行代码正如上面所提到的那样抛出了一个异常。 - master_ruko
它在我的电脑上运行良好,你能否展示一下你遇到的错误。 - Noorul
结果发现,异常是由代码放置的位置引起的。现在我把它放到了合适的位置,它对我来说可以工作了。谢谢你,对于这个愚蠢的问题感到抱歉。 - master_ruko
如果启用了“从我的背景自动选择强调颜色”,则无法正确获取颜色。 - Aidan Fitzpatrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接