2012/02/01

Dependency Property

はまった。

public class Tesuto : TextBox
{
    static Tesuto()
    {
        TextProperty = DependencyProperty.Register("Text", typeof(object), typeof(Tesuto));
    }

    public new static readonly DependencyProperty TextProperty;
    public new object Text
    {
        get { return GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }
}

とやって、デザイナに貼り付けてやると VS2010 がクラッシュして強制終了する。

どうやら Dependency Property は、基底クラスで登録されたものは引き継がれるらしく、デフォルト値は変更できても登録解除とか型の変更とかはできないらしい。

Visual Studio さんも、こういうコードを書く輩がいるとは露とも思わず、Text プロパティが string 型だと思い込みながら新しく定義した object 型の Text プロパティを読み込みに行って失敗してるらしい。

Dependency Property の登録解除に関しては無理矢理やる方法が StackOverflow に載ってたけど、無理矢理過ぎるので流石に使えなさそう。MS さんが何とかしてくれないかなあ。

ちなみに上のコード、デザイナでクラッシュさえ起こさなければ普通にコンパイルが通り、意図通りに動作したりする。余計にもどかしいのであった。

0 件のコメント:

コメントを投稿