Je veux créer SolidColorBrush à partir d'une valeur Hex telle que #ffaacc. Comment puis-je faire ceci?
Sur MSDN, j'ai eu:
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, 255);
Alors j'ai écrit (vu 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
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?
Essayez ceci à la place:
(SolidColorBrush)(new BrushConverter().ConvertFrom("#ffaacc"));
Comment obtenir une couleur à partir d'un code couleur hexadécimal en utilisant .NET?
Je pense que c'est ce que vous recherchez, espérons 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));
J'ai utilisé:
new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ffaacc"));
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;
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()