処理されたRoutedEventはツリーをバブルアップし続けます
-
27-09-2019 - |
質問
TreeView
ベースのコントロールを開発していますが、ダブルクリックイベントが引き続きTreeViewItem
ノードをバブルします。
目標は、TreeViewItem
をダブルクリックしたときに展開または折りたたむことです。
MouseDoubleClick
イベントのイベントハンドラーを各TreeViewItem
に適用するスタイルがあります。
イベントを処理するコードは次のとおりです ジェネラコディセタグプレ
これはトップレベルのTreeViewItem
で正常に機能しますが、子をダブルクリックすると、イベントによってツリーがバブルアップし、ブランチ全体が崩壊します。なぜイベントはバブルを続けているのですか?前述のように、[1]
は、イベントを処理済みとして設定しています。
解決
自分の質問に答えるのは嫌いですが、これが私が最終的に使用するようになった解決策です。
イベントが処理されているかどうかに関係なく、ブランチ内のTreeViewItemごとに(子からルートまで)MouseDoubleClickが発生することを指定したいくつかのソースに出くわした後、この質問の回答を利用しました:
WPF TreeView、PreviewMouseDownイベントでTreeViewItemを取得 >
マウスイベントの下にあったTreeViewItemを取得します。現在の送信者がマウスイベントのTreeViewItemと等しい場合、必要に応じて展開/折りたたみます。それ以外の場合は、イベントを無視して何もしません。
他のヒント
理由はわかりませんが、選択した回答がすべてのジェネラコダイスタグコードで機能するとは限りませんでした。そこで、単純なTreeViewItems
アプローチを使用して、bool
を複数回再インターンしないようにしました。
ジェネラコディセタグプレ
呼び出された最初のハンドラーを完全に実行できるようにするには(したがって、子のハンドラーが親のハンドラーの前に呼び出されるという事実に依存します)、単に追加します: ジェネラコディセタグプレ
登録することを忘れないでください。 ジェネラコディセタグプレ