C#でブラシ/ブラシ色の名前に文字列を変換します
質問
私は、開発者が、文字列を渡すことによって、テキストの色を指定することができ、設定ファイルを持っています
<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"));
ブラシ/ブラシの値が列挙型でないことを除いて。だから、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"));
ああD'。見てのしばらく後、私が見つかりました。
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型グラム、INT B);
あなたはシステムを使用することができます.Drawing.KnownColor を列挙。これは、すべての既知のシステムカラーを指定します。
所属していません StackOverflow