Создание SolidColorBrush из шестнадцатеричного значения цвета

129

Я хочу создать SolidColorBrush из шестнадцатеричного значения, например #ffaacc. Как я могу это сделать?

В MSDN я получил:

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

Итак, я написал (учитывая, что мой метод получает цвет как #ffaacc):

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

Но это дало ошибку как

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

Также 3 ошибки: Cannot convert int to byte.

Но как тогда работает пример MSDN?

Mahesha999
источник
6
Настолько глупо, что они не позволяют использовать формат #FFFFFF по умолчанию.
MrFox
1
Ничего из этого не работает для UWP
kayleeFrye_onDeck

Ответы:

326

Попробуйте вместо этого:

(SolidColorBrush)(new BrushConverter().ConvertFrom("#ffaacc"));
Крис Рэй
источник
17

Как получить цвет из шестнадцатеричного цветового кода с помощью .NET?

Я думаю, это то, что вам нужно, надеюсь, это ответит на ваш вопрос.

Чтобы ваш код работал, используйте Convert.ToByte вместо 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
источник
15

Я использую:

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;
Mahesha999
источник
4

Если вы не хотите каждый раз сталкиваться с болью при преобразовании, просто создайте метод расширения.

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

Затем используйте вот так: BackColor = "#FFADD8E6".ToBrush()

В качестве альтернативы, если бы вы могли предоставить способ сделать то же самое.

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

BackColor = BrushFromHex("#FFADD8E6");
Нил Б.
источник
0

версия vb.net

Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)
Доктор Кто-нибудь
источник