かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

ドロップダウンで選択させたい

HelloControlもそれっぽくなってきたところで、GreetプロパティのNameプロパティをいくつかの名前の候補の中からも選べるようにしたい!
絵にするとこんな感じ

StringConverterを継承してこんな感じで実装するみたいだ。

    public class GreetNameConverter : StringConverter
    {
        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
        {
            // ドロップダウンで選択可能にするよ〜
            return true;
        }

        public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {
            // 選択肢
            return new StandardValuesCollection(new String[] { "太郎", "二郎", "三郎" });
        }

        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
        {
            // 選択肢以外の値も入力していいよ〜
            return false;
        }
    }


これをGreetMessageクラスのNameプロパティのTypeConverter属性で指定してあげれば完成。

[TypeConverter(typeof(GreetNameConverter))]
public string Name
{
    get { return name; }
    set { name = value; }
}

これは簡単だった。