Creazione di SolidColorBrush dal valore del colore esadecimale


129

Voglio creare SolidColorBrush da un valore esadecimale come #ffaacc. Come posso fare questo?

Su MSDN, ho ottenuto:

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

Quindi ho scritto (considerando che il mio metodo riceve il colore come #ffaacc):

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

Ma questo ha dato errore come

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

Anche 3 errori come: Cannot convert int to byte.

Ma allora come funziona l'esempio MSDN?


6
Così stupido che non consentono il formato predefinito #FFFFFF.
MrFox

1
Nessuno di questi funziona per UWP
kayleeFrye_onDeck

Risposte:


326

Prova questo invece:

(SolidColorBrush)(new BrushConverter().ConvertFrom("#ffaacc"));

17

Come ottenere il colore dal codice colore esadecimale utilizzando .NET?

Questo penso sia quello che stai cercando, spero che risponda alla tua domanda.

Per far funzionare il tuo codice usa Convert.ToByte invece di 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

Sto 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

Se non vuoi affrontare ogni volta il dolore della conversione, crea semplicemente un metodo di estensione.

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

Quindi usa in questo modo: BackColor = "#FFADD8E6".ToBrush()

In alternativa, se potessi fornire un metodo per fare la stessa cosa.

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

BackColor = BrushFromHex("#FFADD8E6");

0

versione vb.net

Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.