開発者が文字列を渡すことでテキストの色を指定できる構成ファイルがあります。
<text value="Hello, World" color="Red"/>
巨大なswitchステートメントですべての可能な色を探すのではなく、代わりにSystem.Drawing.Brushesクラスのプロパティを使用するだけでいいので、内部的には次のように言えます。
Brush color = Brushes.Black; // Default
// later on...
this.color = (Brush)Enum.Parse(typeof(Brush), prasedValue("color"));
Brush/Brushesの値が列挙型ではないことを除きます。だから、Enum.Parseは私に喜びを与えません。提案?
文字列を色またはブラシに変換するさまざまな方法、以前のすべての答えの要約:
// 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;
これが私の場合です!
ブラシは次のように宣言できます
Brush myBrush = new SolidBrush(Color.FromName("Red"));
ああしばらく見て、私は見つけた:
Color.FromName(a.Value)
「投稿」を押した後。そこから次のステップに進みます:
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の値の値を指定できるようにすることができます。次に、Color.FromArgb(int r、int g、int b);を呼び出すだけです。