Crear SolidColorBrush a partir del valor de color hexadecimal

129

Quiero crear SolidColorBrush a partir de un valor hexadecimal como #ffaacc. ¿Cómo puedo hacer esto?

En MSDN, obtuve:

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

Entonces escribí (considerando que mi método recibe color como #ffaacc):

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

Pero esto dio error como

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

También 3 errores como: Cannot convert int to byte.

Pero entonces, ¿cómo funciona el ejemplo de MSDN?

Mahesha999
fuente
66
Tan estúpido que no permiten el formato predeterminado #FFFFFF.
MrFox
1
Ninguno de estos trabajos para UWP
kayleeFrye_onDeck

Respuestas:

325

Intenta esto en su lugar:

(SolidColorBrush)(new BrushConverter().ConvertFrom("#ffaacc"));
Chris Ray
fuente
17

¿Cómo obtener color del código de color hexadecimal usando .NET?

Creo que esto es lo que buscas, espero que responda tu pregunta.

Para que su código funcione, use Convert.ToByte en lugar de 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));
GJHix
fuente
15

He estado usando:

new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ffaacc"));
Jon Vielhaber
fuente
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;
Mahesha999
fuente
4

Si no desea lidiar con el dolor de la conversión cada vez, simplemente cree un método de extensión.

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

Luego use así: BackColor = "#FFADD8E6".ToBrush()

Alternativamente, si pudiera proporcionar un método para hacer lo mismo.

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

BackColor = BrushFromHex("#FFADD8E6");
Neil B
fuente
0

versión vb.net

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