2009-09-15 7 views
15

私はWPF/Silverlightを勉強しており、EventArgsよりRoutedEventArgsを使用することをMSのビデオ配信で見ています。なぜそれが正確に言わなかったのでしょうか。RoutedEventArgsとEventArgs

特定の表示技術(Presenters/ViewModels)に拘束されないように、「ウィジェット」用のインターフェースを使用するwinフォームアプリケーションがあるので、私のIButton Clickイベントで今はRoutedEventArgsそれは有用ではないと推測します。

すべての場合でRoutedEventArgsに切り替える必要がある場合は誰かが説明してください。なぜですか?

他にも、インタフェースウィジェットの使い方についての経験や意見は他にもありますか?

答えて

32

さて、いずれかの要素(Bubbleイベントルート)ルートにソース要素から、または、より少ない頻度でルート要素から下位レベル要素へLogicalツリーを介して基本的にRoutedEvent走行、(Tunnelイベントルート)。これは、StackPanelの中にButtonがある場合、それ自体がGridの内部にあることを意味します。コントロール内にClickイベントを定義すると、のいずれかがに処理されない限り、イベントはすべてトリガーされます。

イベントルートは(通常のイベントClickと命名)Bubbleであれば、それは行きます:

Button -> StackPanel -> Grid

イベントルートは(PreviewClick命名)Tunnelであれば、それは周りの他の道を行きます:だから

Grid -> StackPanel -> Button

取り扱いと、それはです ものすごく単純。 Bubbleルートで、ButtonRoutedEventArgs.Handledをtrueに設定した場合、そのStackPanelGridはそれをトリガーしません。 RoutedEventと同じで、Gridがそれを処理する場合、StackPanelButtonはトリガーしません。

これは簡単にわかりましたが、簡単にするためにいくつかのことを避けました。

このWPF機能をよりよく理解するために、this chapterをお勧めします。

+2

頭が=痛い( – Coops

+1

は、何のゲインを痛みを@CodeBlendない! – Carlo

+1

シンプルで簡潔な説明を。あなたはトンネルイベントを使用する必要があるだろうか場合は?私は、任意の実用的な使用を考えることはできません。 –

1

RoutedEventArgsは、イベントのWPFモデルをサポートするために存在する新しいタイプのイベント引数です。短いエントリーで、なぜWPFがこのモデルを選んだのか、それとも何がポイントなのかを説明するのは難しいので、まずは主題についての良い記事を紹介することから始めます。

0

他の要素を含むButton要素があるとします.StackPanel自体にTextBoxとImage要素が含まれています。

Button要素は、クリックされたImageまたはTextBoxがあった場合でも、Clickイベントを処理できる必要があります。

したがってWPFがへの道を提供:

  • インスタンスのルート要素に向かってより高いレベル(と、(ここでは画像は言う)は、時間のほとんどは、ソース要素から バブリング要素ツリーを介してイベントを伝播しますここのボタン)。
  • このような伝播イベントを処理します。
関連する問題