Створення SolidColorBrush з шістнадцяткового значення кольору


129

Я хочу створити SolidColorBrush із значення Hex, такого як #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?


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));


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

Якщо ви не хочете щодня стикатися з болем за конверсію, просто створіть метод розширення.

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");

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.