从十六进制颜色值创建SolidColorBrush

时间:2012-04-08 11:16:49

标签: wpf

我想从Hex值创建SolidColorBrush,例如#ffaacc。我怎么能这样做?

在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));

但是这给出了错误

The best overloaded method match for 'System.Windows.Media.Color.FromRgb(byte, byte, byte)' has some invalid arguments

还有3个错误:Cannot convert int to byte.

但那么MSDN示例如何运作?

6 个答案:

答案 0 :(得分:275)

请改为尝试:

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

答案 1 :(得分:16)

How to get Color from Hexadecimal color code using .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));

答案 2 :(得分:12)

我一直在使用:

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

答案 3 :(得分:9)

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;

答案 4 :(得分:2)

如果您不想每次都处理转换的麻烦,只需创建一个扩展方法即可。

public static class Extensions
{
    public static SolidColorBrush ToBrush(this string HexColorString)
    {
        return (SolidColorBrush)(new BrushConverter().ConvertFrom(HexColorString));
    }    
}

然后这样使用:BackColor = "#FFADD8E6".ToBrush()

答案 5 :(得分:0)

vb.net版本

NSMeasurementFormatter