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?


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

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

15

He estado usando:

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

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

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

0

versión vb.net

Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.