アプリに次のツリーがあります。
MainWindow (Window)
> LayoutRoot (Grid)
> (MyCustomControl)
> Item1 (Grid)
> Button (Button1)
MyCustomControl は ItemsControl から派生し、その項目を StackPanel に表示します。
MyCustomControl は、マウスがクリックされたときに知る必要があるため、OnPreviewMouseDown メソッドをオーバーライドし、コントロール内でマウスが押されたときに通知を受けることを期待しています。
何が起こるか: Button1 内をクリックすると、PreviewMouseDown イベントがツリーに沿って移動し、OnPreviewMouseDown が期待どおりに実行されます。しかし、Item1 をクリックすると、PreviewMouseDown イベントは MainWindow の直後に停止し、LayoutRoot にも到達しません。
Snoopを使用して取得したルーティング イベントの詳細は次のとおりです。
Button1 のクリック:
(Window)
> (Border)
> (AdornerDecorator)
> (ContentPresenter)
> LayoutRoot (Grid)
> (MyCustomControl)
> (Border)
> (StackPanel)
> Item1 (Grid)
> Button1 (Button)
> Chrome (ButtonChrome)
Item1 をクリック:
(Window)
> (Border)
イベントは処理済みとして報告されることはないため、私が知る限り、トンネリングを続行する必要があります。
ここで何が欠けていますか?