質問

私は、開発者が、文字列を渡すことによって、テキストの色を指定することができ、設定ファイルを持っています

 <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 を列挙。これは、すべての既知のシステムカラーを指定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top