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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top