Konvertiert Zeichenketten Bürsten / Pinsel Farbbezeichnung in C #
Frage
Ich habe eine Konfigurationsdatei, in der ein Entwickler eine Textfarbe, indem in einem String angeben:
<text value="Hello, World" color="Red"/>
Anstatt eine gigantische für alle möglichen Farben switch-Anweisung anzeigen zu lassen, wäre es schön, nur die Eigenschaften in der Klasse System.Drawing.Brushes zu verwenden, anstatt intern so ich so etwas sagen kann:
Brush color = Brushes.Black; // Default
// later on...
this.color = (Brush)Enum.Parse(typeof(Brush), prasedValue("color"));
Mit Ausnahme , dass die Werte in Pinsel / Bürsten sind nicht Aufzählungen. So Enum.Parse gibt mir keine Freude. Vorschläge?
Lösung
Rekapitulation aller bisherigen Antworten, verschiedene Möglichkeiten, eine Zeichenfolge in eine Farbe oder Pinsel zu konvertieren:
// 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");
Andere Tipps
String zu bürsten:
myTextBlock.Foreground = new BrushConverter().ConvertFromString("#FFFFFF") as SolidColorBrush;
Das ist mein Fall hier!
Eine Bürste kann wie folgt erklärt werden
Brush myBrush = new SolidBrush(Color.FromName("Red"));
D'oh. Nach einer gewissen Zeit von der Suche gefunden:
Color.FromName(a.Value)
Nach dem Drücken "post". Von dort ist es nur ein kleiner Schritt zu:
color = new SolidBrush(Color.FromName(a.Value));
Ich werde diese Frage hier lassen für andere ....
Sie könnten Reflexion für diese verwenden:
Type t = typeof(Brushes);
Brush b = (Brush)t.GetProperty("Red").GetValue(null, null);
Natürlich, werden Sie einige Fehlerbehandlung / Bereichsprüfung wollen, wenn die Zeichenfolge falsch ist.
Ich bin damit einverstanden, dass die Verwendung Typeconverter ist die beste Methode:
Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
return new Brush(c);
Versuchen Sie, eine TypeConverter
verwenden. Beispiel:
var tc = TypeDescriptor.GetConverter(typeof(Brush));
Eine weitere Alternative ist die Reflexion zu verwenden, und die Eigenschaften in SystemBrushes
gehen.
Wenn Sie möchten, können Sie dies noch mehr erweitern und es ihnen ermöglichen, Werte für die R-, G- und B-Werte angeben. Dazu einfach Color.FromArgb nennen (int r, int g, int b);
Sie können mit -System .Drawing.KnownColor enum. Es gibt alle bekannten Systemfarben.