Criando SolidColorBrush a partir do valor da cor hexadecimal

129

Quero criar o SolidColorBrush a partir do valor Hex, como #ffaacc. Como posso fazer isso?

No MSDN, obtive:

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

Então eu escrevi (considerando que meu método recebe cores 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));

Mas isso deu erro como

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

Também 3 erros como: Cannot convert int to byte.

Mas então como o exemplo do MSDN funciona?

Mahesha999
fonte
6
Tão estúpido que eles não permitem o formato #FFFFFF padrão.
MrFox
1
Nenhum destes trabalho para UWP
kayleeFrye_onDeck

Respostas:

325

Tente isso:

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

Como obter cores do código de cores hexadecimal usando o .NET?

Acho que é isso que você procura, espero que responda à sua pergunta.

Para que seu código funcione, use Convert.ToByte em vez 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
fonte
15

Eu tenho usado:

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

Se você não quiser lidar com a dor da conversão toda vez, basta criar um método de extensão.

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

Então use assim: BackColor = "#FFADD8E6".ToBrush()

Como alternativa, se você puder fornecer um método para fazer a mesma coisa.

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

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

versão vb.net

Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)
Dr. Alguém
fonte