142

我想从 #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));

但这给出了错误

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 示例是如何工作的呢?

4

6 回答 6

365

试试这个:

(SolidColorBrush)new BrushConverter().ConvertFrom("#ffaacc");
于 2012-05-22T21:09:01.587 回答
22

我一直在使用:

new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ffaacc"));
于 2016-05-24T19:35:27.100 回答
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));
于 2012-04-08T11:50:07.383 回答
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;
于 2012-04-08T19:28:56.780 回答
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");
于 2018-08-18T09:54:46.580 回答
0

vb.net版

Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)
于 2019-09-15T11:09:14.283 回答