c# .net graphics colors brush

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



brushes c# (9)

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

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

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?


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 ...


Intenta usar un TypeConverter . Ejemplo:

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

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


Podría usar el reflejo 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.


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


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

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


Cadena para cepillar:

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

Ese es mi caso aquí!


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


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