かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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

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; }
}

これは簡単だった。