Conversión de cadena a pinceles / nombre de color de pincel en C #

Tengo un archivo de configuración donde un desarrollador puede especificar un color de texto al pasar una cadena:

 

En lugar de tener un enunciado de cambio gigante para buscar todos los colores posibles, sería bueno usar las propiedades de la clase System.Drawing.Brushes en su lugar internamente. Puedo decir algo como:

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

Excepto que los valores en Pincel / Pinceles no son enumeraciones. Así que Enum.Parse no me da alegría. Sugerencias?

Resumen de todas las respuestas anteriores, diferentes formas de convertir una cadena en Color o Pincel:

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

Cadena para cepillar:

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

Ese es mi caso aquí!

Cepillar myBrush = new SolidBrush (Color.FromName (“Rojo”));

D’oh. Después de un rato de buscar encontré:

  Color.FromName(a.Value) 

Después de presionar “publicar”. A partir de ahí, hay un pequeño paso para:

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

Dejaré esta pregunta aquí para otros …

Podría usar el reflection para esto:

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

Por supuesto, querrá un control de errores / comprobación de rango si la cadena es incorrecta.

Acepto que el uso de TypeConverters es el mejor método:

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

Intenta usar un TypeConverter . Ejemplo:

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

Otra alternativa es usar la reflexión y revisar las propiedades en SystemBrushes .

Si lo desea, puede ampliar esto aún más y permitirles especificar valores para los valores R, G y B. Luego, simplemente llame a Color.FromArgb (int r, int g, int b);

Puede usar System.Drawing.KnownColor enum. Especifica todos los colores de sistema conocidos.