1. ホーム
  2. wpf

[解決済み] WPFプレビューイベントとは何ですか?

2023-07-03 19:27:19

質問

すべての要素に KeyDown と PreviewKeyDown というイベントがあるように、イベント "Preview******" の記述を探しています。どのような違いがあるのでしょうか(片方が付属イベント、片方が付属イベントでないということではなく、従来の本当の違い、プログラミング方法の違いです)。

Controlから派生したクラスでは、両方のメソッドをオーバーライドすることができます。OnKeyDown と OnPreviewKeyDown の両方のメソッドをオーバーライドできます。また、両者の違いは何ですか。

どのように解決するのですか?

プログラミングWPFより - Chris Sells、Ian Griffith

ダイレクトイベントを除いて WPF では、ほとんどのルーティング イベントをペアとして定義しています。 トンネリングとバブリングのペアです。 バブリングです。トンネリングイベント名 は常に 'Preview' で始まり、最初に発生します。 最初に発生します。これにより、親は に届く前にイベントを見ることができます。 を見ることができます。続いて バブリングと同じです。ほとんどの場合 ほとんどの場合、バブリングイベントだけを処理することになります。 を処理することになります。プレビューは は通常

  • イベントをブロックする ( e.Handled = true )
  • は、通常のイベント処理に先立ち、親に何かをさせるようにします。

例:UI Tree = Button contains Grid contains Canvas contains Ellipseの場合

楕円をクリックすると、(MouseDownButtonがButtonに食われ、代わりにClickが発生する)という結果になる。

PreviewMouseDownButton
PreviewMouseDownGrid
PreviewMouseDownCanvas
PreviewMouseDownEllipse
MouseDownEllipse
MouseDownCanvas
MouseDownGrid