概要
WPFで見栄えを良くする為に、とにかくカラーサンプルを用意したくなる時があります。
カラフルな箱を沢山並べたり・・・
ランダムに色コードを生成しても良いのですが、乱数で生成された色コードでは、綺麗でない色が生成される確率が高いためイマイチ見栄えがよく有りません。
System.Windows.Media.Colorsを利用する
皆さんご存の通り、Colorsクラスに、well-known Colors(有名な色、代表的な色)が用意されています。
ですが、実装を調べてみると列挙型では無くて、プロパティとして実装されています。
MSDN Colors
内部でKnownColor列挙型を利用しているので、そちらを公開してくれていれば、話は速いのですが、残念ながらinternalクラスです。
列挙型ならEnum.GetNames()メソッドを使えたんですけどね。
そんな時には、リフレクションです。
var methods = typeof(Colors).GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.GetProperty);
for(int i = 0; i < methods.Count(); i++)
{
var color = (Color)methods[i].Invoke(methods[i], null);
}
リフレクションは、速度が遅いので使い方を誤ると痛いしっぺ返しを受けますが、起動時に一回だけカラーコードを引っこ抜くので有れば、問題はありません。