web-dev-qa-db-ja.com

ルーティングイベントと添付イベントの違いは何ですか?

これらのルーティングイベント、依存関係プロパティ、およびアタッチされたイベントに遭遇したWPFの概念について説明します。

それらの背後にある概念は何ですか?なぜそれらが.NETの通常のメソッドの代わりに呼び出されるのですか?

7
judith

ルーティングされたイベント

MSDNによると

ルーティングイベントは、イベントを発生させたオブジェクトだけでなく、要素ツリーの複数のリスナーでハンドラーを呼び出すことができるイベントのタイプです。

定義の後には、3つのボタンを持つWPFノードの例が続きます。 1つのルーティングイベントは3つのボタンをリッスンしています。通常のイベントを使用して同じコードを記述しようとする場合、ボタンごとに1つのイベントである3つの別々のイベントを使用する必要があります。

つまり、同じ子のすべてのコントロールで複数のイベントを定義する代わりに、関連するすべての子によって発生する親レベルでルーティングイベントを定義する必要があります。

さらに、 WPFTutorial.netのルーティングイベント を読んで、私の回答よりも正確な用語を使用し、ルーティングイベントが通常ペアとして表示される理由についても説明します。

依存関係プロパティ

MSDNによると

依存関係プロパティの目的は、他の入力の値に基づいてプロパティの値を計算する方法を提供することです。

依存関係プロパティを通常のプロパティとして使用できるので、コード(特にコードを使用する機能)を簡略化する方法と考えてください。

さらに、 Switch On The Codeの記事 に関するより完全な記事を読むことをお勧めします。これは、DependencyPropertyが静的であることが理にかなっている理由を説明し、変更コールバックを追加する方法または検証などを使用する.

添付イベント

MSDNによると

添付イベントの概念により、特定のイベントのハンドラーを、実際にイベントを定義または継承する要素ではなく、任意の要素に追加できます。

これは、イベントを発生させるオブジェクトが実際のWPFツリーから独立している場合に特に役立ちます。同じドキュメントで提供されている例の1つはマウスイベントです。これらのイベントがWPF要素に関連していない場合、MouseDownの場合と同様に、イベントを発生させて待機します。

さらに、 添付されたイベントの例 を読むことをお勧めします。これは、 "イベントを定義するクラスが、イベントのユーザーでもない(多くの場合、ハンドラー)もイベントのソース(コードが発生させたものも)。」であり、添付されたイベントとルーティングされたイベントとの違いについての詳細を示します。

17