Reputation: 24831
I want to create SolidColorBrush from Hex value such as #ffaacc. How can I do this?
On MSDN, I got :
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, 255);
So I wrote (considering my method receives color as #ffaacc
):
Color.FromRgb(
Convert.ToInt32(color.Substring(1, 2), 16),
Convert.ToInt32(color.Substring(3, 2), 16),
Convert.ToInt32(color.Substring(5, 2), 16));
But this gave error as
The best overloaded method match for 'System.Windows.Media.Color.FromRgb(byte, byte, byte)' has some invalid arguments
Also 3 errors as: Cannot convert int to byte.
But then how MSDN example works?
Upvotes: 151
Views: 181143
Reputation: 5003
Try this instead:
(SolidColorBrush)new BrushConverter().ConvertFrom("#ffaacc");
Upvotes: 397
Reputation: 2224
If you don't want to deal with the pain of the conversion every time simply create an extension method.
public static class Extensions
{
public static SolidColorBrush ToBrush(this string HexColorString)
{
return (SolidColorBrush)(new BrushConverter().ConvertFrom(HexColorString));
}
}
Then use like this: BackColor = "#FFADD8E6".ToBrush()
Alternately if you could provide a method to do the same thing.
public SolidColorBrush BrushFromHex(string hexColorString)
{
return (SolidColorBrush)(new BrushConverter().ConvertFrom(hexColorString));
}
BackColor = BrushFromHex("#FFADD8E6");
Upvotes: 9
Reputation: 37
vb.net version
Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)
Upvotes: 2
Reputation: 271
I've been using:
new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ffaacc"));
Upvotes: 27
Reputation: 24831
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;
Upvotes: 11
Reputation: 522
How to get Color from Hexadecimal color code using .NET?
This I think is what you are after, hope it answers your question.
To get your code to work use Convert.ToByte instead of 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));
Upvotes: 17