Silverlight/WPF устанавливает эллипс с шестнадцатеричным цветом

Я пытаюсь установить цвет объекта эллипса в коде позади. Пока что я делаю это с помощью метода SolidColorBrush. Есть ли способ вставить значение цвета в шестнадцатеричном, как в CSS?

Вот код, который я использую:

ellipse.Fill = new SolidColorBrush(Colors.Yellow);

7 ответов

Решение

Я написал простую функцию преобразования цвета, чтобы решить эту проблему. Счастливые лица на самом деле число 8 и скобки, как это: 8).

Примерно так будет работать

ellipse.Fill = 
    new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF00DD")); 

(Редактировать: похоже, это только WPF. У Алекса Голеша есть запись в блоге о его Silverlight ColorConverter)

Хотя я предпочитаю Color.FromRgb метод

byte r = 255;
byte g = 0;
byte b = 221;
ellipse.Fill = new SolidColorBrush(Color.FromRgb(r,g,b)); 

Из MSDN

SolidColorBrush mySolidColorBrush = new SolidColorBrush();

// Describes the brush's color using RGB values. 
// Each value has a range of 0-255.
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, 255);
myRgbRectangle.Fill = mySolidColorBrush;   

Конечно, вы также можете сделать что-то вроде этого (используя шестнадцатеричные числа в функции FromArgb):

SolidColorBrush mySolidColorBrush = new SolidColorBrush();

// Describes the brush's color using RGB HEX values. 
// Each value has a range of 0-255. Use 0x for HEX numbers
mySolidColorBrush.Color = Color.FromArgb(255, 0xFF, 0xC0, 0xD0);
myRgbRectangle.Fill = mySolidColorBrush;

Еще один, маленький, быстрый и полезный:

public static Color ToColor(this uint argb)
{
    return Color.FromArgb((byte)((argb & -16777216) >> 0x18),
                          (byte)((argb & 0xff0000) >> 0x10),
                          (byte)((argb & 0xff00) >> 8),
                          (byte)(argb & 0xff));
}

Используйте в коде:

SolidColorBrush scb  = new SolidColorBrush (0xFFABCDEF.ToColor());

Конечно, необходимо использовать нотацию 0xFFFFFFFF (uint) вместо "#FFFFFFFF" (строка), но я уверен, что это не так уж и страшно.

Для использования шестнадцатеричного значения:

 your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)

Я думаю, что это будет работать, как это работает для текстового поля.

var bc = new BrushConverter();
textRichTextBoxEditor.Foreground = (Brush)bc.ConvertFrom("#FF97315A");

Посетите http://soulsolutions.com.au/Blog/tabid/73/EntryId/617/Using-Hex-Colour-values-to-set-Foreground-in-WPF.aspx

Другие вопросы по тегам