Подтвердить что ты не робот

Преобразовать строку в название кисти/кисти в С#

У меня есть файл конфигурации, в котором разработчик может указать цвет текста, передав строку:

 <text value="Hello, World" color="Red"/>

Вместо того, чтобы иметь гигантский оператор switch, ищите все возможные цвета, было бы неплохо просто использовать свойства в классе System.Drawing.Brushes, вместо этого внутренне я могу сказать что-то вроде:

 Brush color = Brushes.Black;   // Default

 // later on...
 this.color = (Brush)Enum.Parse(typeof(Brush), prasedValue("color"));

За исключением того, что значения в кисти/кистях не являются перечислениями. Поэтому Enum.Parse не радует меня. Предложения?

4b9b3361

Ответ 1

Повторите все предыдущие ответы, различные способы преобразования строки в цвет или кисть:

// best, using Color static method
Color red1 = Color.FromName("Red");

// using a ColorConverter
TypeConverter tc1 = TypeDescriptor.GetConverter(typeof(Color)); // ..or..
TypeConverter tc2 = new ColorConverter();
Color red2 = (Color)tc.ConvertFromString("Red");

// using Reflection on Color or Brush
Color red3 = (Color)typeof(Color).GetProperty("Red").GetValue(null, null);

// in WPF you can use a BrushConverter
SolidColorBrush redBrush = (SolidColorBrush)new BrushConverter().ConvertFromString("Red");

Ответ 2

Строка для кисти:

myTextBlock.Foreground = new BrushConverter().ConvertFromString("#FFFFFF") as SolidColorBrush;

Что мое дело здесь!

Ответ 3

D'о. Через некоторое время я нашел:

 Color.FromName(a.Value)

После удара "пост". Оттуда это короткий шаг:

 color = new SolidBrush(Color.FromName(a.Value));

Я оставлю этот вопрос здесь для других....

Ответ 4

Brush myBrush = новый SolidBrush (Color.FromName( "Красный" ));

Ответ 5

Вы можете использовать отражение для этого:

Type t = typeof(Brushes);
Brush b = (Brush)t.GetProperty("Red").GetValue(null, null);

Конечно, вам понадобится некоторая проверка ошибок/проверка диапазона, если строка неверна.

Ответ 6

Я согласен с тем, что использование TypeConverters - лучший способ:

 Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
 return new Brush(c);

Ответ 7

Попробуйте использовать TypeConverter. Пример:

var tc = TypeDescriptor.GetConverter(typeof(Brush));

Другая альтернатива - использовать отражение и переходить к свойствам в SystemBrushes.

Ответ 8

Если вы хотите, вы можете расширить его еще больше и позволить им указывать значения для значений R, G и B. Затем вы просто вызываете Color.FromArgb(int r, int g, int b);

Ответ 9

Вы можете использовать System.Drawing.KnownColor enum. Он определяет все известные цвета системы.