从十六进制颜色值创建SolidColorBrush

147

我想要创建从十六进制值(例如#ffaacc)生成的SolidColorBrush对象。我该怎么做?

在MSDN上,我找到了以下信息:

SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, 255);

因此,我编写了以下代码(考虑到我的方法接收颜色值为 #ffaacc):

Color.FromRgb(
  Convert.ToInt32(color.Substring(1, 2), 16), 
  Convert.ToInt32(color.Substring(3, 2), 16), 
  Convert.ToInt32(color.Substring(5, 2), 16));

但是这样会导致错误:

System.Windows.Media.Color.FromRgb(byte, byte, byte)的最佳重载方法有一些无效参数。

还有3个错误,如下:不能将int转换为byte。

那么MSDN示例是如何工作的呢?


8
太愚蠢了,他们不允许使用默认的 #FFFFFF 格式。 - MrFox
2
这些都不适用于UWP。 - kayleeFrye_onDeck
6个回答

385

试试这个:

(SolidColorBrush)new BrushConverter().ConvertFrom("#ffaacc");

23

我一直在使用:

new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ffaacc"));

17

如何使用.NET从十六进制颜色代码获取颜色?

我认为这就是您想要的,希望它回答了您的问题。

要使您的代码正常工作,请使用Convert.ToByte而不是Convert.ToInt...

string colour = "#ffaacc";

Color.FromRgb(
Convert.ToByte(colour.Substring(1,2),16),
Convert.ToByte(colour.Substring(3,2),16),
Convert.ToByte(colour.Substring(5,2),16));

10
using System.Windows.Media;

byte R = Convert.ToByte(color.Substring(1, 2), 16);
byte G = Convert.ToByte(color.Substring(3, 2), 16);
byte B = Convert.ToByte(color.Substring(5, 2), 16);
SolidColorBrush scb = new SolidColorBrush(Color.FromRgb(R, G, B));
//applying the brush to the background of the existing Button btn:
btn.Background = scb;

7
如果您不想每次都处理转换的痛苦,可以创建一个扩展方法。
public static class Extensions
{
    public static SolidColorBrush ToBrush(this string HexColorString)
    {
        return (SolidColorBrush)(new BrushConverter().ConvertFrom(HexColorString));
    }    
}

然后按如下方式使用:BackColor = "#FFADD8E6".ToBrush()

如果您能提供一种实现相同效果的方法也可以。

public SolidColorBrush BrushFromHex(string hexColorString)
{
    return (SolidColorBrush)(new BrushConverter().ConvertFrom(hexColorString));
}

BackColor = BrushFromHex("#FFADD8E6");

1

VB.NET 版本

Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)

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