Преобразование строки в кисти / название цвета кисти в C#
у меня есть файл конфигурации, где разработчик может указать цвет текста, передав строку:
<text value="Hello, World" color="Red"/>
вместо того, чтобы гигантский оператор switch искал все возможные цвета, было бы неплохо просто использовать свойства в системе классов.Рисунок.Кисти вместо этого так внутренне я могу сказать что-то вроде:
Brush color = Brushes.Black; // Default
// later on...
this.color = (Brush)Enum.Parse(typeof(Brush), prasedValue("color"));
за исключением того, что значения в Brush / Brush не являются перечислениями. Итак, Перечисление.Парс не доставляет мне радости. Предложения?
9 ответов
перепросмотр всех предыдущих ответов, различные способы преобразования строки в цвет или кисть:
// best, using Color's 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");
строка до кисти:
myTextBlock.Foreground = new BrushConverter().ConvertFromString("#FFFFFF") as SolidColorBrush;
Это мое дело здесь!
отмена. Через некоторое время я нашел:
Color.FromName(a.Value)
после нажатия "post". Оттуда это короткий шаг, чтобы:
color = new SolidBrush(Color.FromName(a.Value));
Я оставлю этот вопрос здесь для других....
вы можете использовать отражение для этого:
Type t = typeof(Brushes);
Brush b = (Brush)t.GetProperty("Red").GetValue(null, null);
конечно, вам понадобится некоторая обработка ошибок / проверка диапазона, если строка неверна.
Я согласен, что использование TypeConverters-лучший метод:
Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
return new Brush(c);
попробуйте использовать TypeConverter
. Пример:
var tc = TypeDescriptor.GetConverter(typeof(Brush));
Другой альтернативой является использование отражения и переход к свойствам в SystemBrushes
.
Если вы хотите, вы можете расширить это еще больше и позволить им указать значения для значений R, G и B. Тогда вы просто называете цвет.FromArgb(int r, int g, int b);