私はWPFカスタムコントロールを作成していて、状況に遭遇しました。多くのコードは、コントロールが初期化されるまで実行されません。if (this.IsInitialized) { ... }
しかし、初期化されていないため、これが原因でデザイナーに問題が発生しています。DesignerProperties.GetIsInDesignMode(...)を使用した場合に発生する可能性のある問題?
カスタムコントロールでDesignerProperties.GetIsInDesignMode()
を使用するのが普通ですが、もしそうなら、私はどんな落とし穴にも注意する必要がありますか?デザイナー特有のチェック/コードをカスタムコントロールに持たせるのはちょっと汚いと思われるので、私はこれを尋ねます。
Microsoftがデザイナ固有のコード(属性ではない)をコントロールコードで使用しているかどうかを知るには、良い測定方法があると思いますか?
私はそれが私はプロパティが設定されていることを順序の問題を回避するために、IsInitializedチェックしてOnPropertyChangedをメソッドを守るために持っていただけのことだ...重く依存関係プロパティと読み取り専用の依存関係プロパティを使用しています。 'は、'です。私を信じて、私はこれらの2 DPが相互に絡み合っていて、呼び出し前の呼び出しの順序が説明されていなければ問題を引き起こすという点を除いて、IsInitializedを使う必要は一度もありません。 –
@ m-y代わりにヌル/無効の状態を確認することはできません。何が原因でデザイン時には失敗しますが、実行時には機能しますか? –
基本的に私は、2つのDPがお互いに等しくない状況があります。これらは文字の値なので、デフォルト値としてNULLにすることはできません(代わりに '+'と ' - ')。さて、もし私がXAMLでそれらを設定すると、一時的に相互に等しい(例外がスローされる)pre-initとなる可能性があります...しかし、初期化後に私は彼らの平等を正しくチェックすることができます...問題はデザイナーがコントロールを初期化していないことです。私はちょうどデザイナー固有のコードを活用しなければならないと思う。 –