2

WPFカスタムコントロールを作成していて、ある状況に遭遇しました。コントロールが初期化されるまで、多くのコードは実行されません。if (this.IsInitialized) { ... }ただし、初期化されないため、これがデザイナーに問題を引き起こしています。

カスタムコントロールでを使用するのが普通かどうか疑問に思っていDesignerProperties.GetIsInDesignMode()ます。そうであれば、落とし穴に注意する必要がありますか?カスタムコントロールにデザイナー固有のチェック/コードがあるのは「汚い」ように見えるので、これを尋ねます。

MicrosoftがコントロールコードのいずれかでDesigner固有のコード(属性ではない)を使用しているかどうかを知ることは、良い測定基準になると思いますか?

4

2 に答える 2

1

これが、この方法がそもそも存在する主な理由の1つです。

コードロジックにデザイン固有のチェックを入れるのは「汚い」と感じることには同意しますが、それが最も実用的なアプローチである場合もあります。個人的には、デザインモードでコントロールをうまく機能させることは、カスタムコントロールの必要な実装と機能の一部であると感じています。その場合、そのケースを処理するための特別なコードを持つことは必ずしも悪いことではありません。

コントロールが初期化されるまで、多くのコードは実行されません。

ただし、このコードを詳しく調べることをお勧めします。WPFでカスタムコントロールを作成する場合、コードが初期化されているかどうかではなく、バインドされているデータに基づいて実行されるコードを使用する方がよい場合がよくあります。バインドされたデータまたはプロパティに基づいてコードを実行する場合、デザイナーで実行しているのか、アプリケーションを実行しているのかは関係ありません。

于 2011-12-21T21:34:03.240 に答える
0
public MyView()
        {
            if (DesignerProperties.GetIsInDesignMode(this))                                          
                return;

            InitializeComponent();            
        }
于 2014-01-24T11:37:44.313 に答える