Création de SolidColorBrush à partir d'une valeur de couleur hexadécimale

129

Je veux créer SolidColorBrush à partir d'une valeur Hex telle que #ffaacc. Comment puis-je faire ceci?

Sur MSDN, j'ai:

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

J'ai donc écrit (considérant que ma méthode reçoit la couleur comme #ffaacc):

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

Mais cela a donné une erreur car

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

Aussi 3 erreurs comme: Cannot convert int to byte.

Mais alors comment fonctionne l'exemple MSDN?

Mahesha999
la source
6
Tellement stupide qu'ils n'autorisent pas le format par défaut #FFFFFF.
MrFox
1
Aucun de ces travaux pour UWP
kayleeFrye_onDeck

Réponses:

326

Essayez plutôt ceci:

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

Comment obtenir une couleur à partir d'un code de couleur hexadécimal en utilisant .NET?

Je pense que c'est ce que vous recherchez, j'espère que cela répond à votre question.

Pour que votre code fonctionne, utilisez Convert.ToByte au lieu 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
la source
15

J'utilise:

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

Si vous ne voulez pas faire face à la douleur de la conversion à chaque fois, créez simplement une méthode d'extension.

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

Ensuite, utilisez comme ceci: BackColor = "#FFADD8E6".ToBrush()

Sinon, si vous pouviez fournir une méthode pour faire la même chose.

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

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

version vb.net

Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)
Dr Quelqu'un
la source