已处理的 RoutedEvent 继续在树中冒泡

2024-02-21

我正在开发一个TreeView基于控制和我的双击事件继续冒泡我的TreeViewItem nodes.

目标是拥有TreeViewItem双击时展开或折叠。

我有一种样式,将事件处理程序应用于MouseDoubleClick事件给每个TreeViewItem.

这是处理事件的代码


private void TreeViewItemDoubleClicked( object sender, RoutedEventArgs e )
{
    // Get the specific tree view item that was double clicked
    TreeViewItem treeViewItem = sender as TreeViewItem;

    // not null?
    if( null != treeViewItem )
    {
         // Switch expanded state
         if( true == treeViewItem.IsExpanded )
         {
             treeViewItem.IsExpanded = false;
         }
         else
         {
             treeViewItem.IsExpanded = true;
         }

         // Set event handled
         e.Handled = true; // [1]
    }
}

这对于顶级来说效果很好TreeViewItem然而,当双击子项时,事件会在树上冒泡,导致整个分支崩溃。事件为何持续发酵?正如所指出的[1]我正在将事件设置为已处理。


讨厌回答我自己的问题,但这是我最终使用的解决方案。

在遇到一些消息来源指定为分支中的每个 TreeViewItem(从子级到根级)引发 MouseDoubleClick 后,无论事件是否被处理,我都利用了这个问题的答案:

WPF TreeView,在PreviewMouseDown事件中获取TreeViewItem https://stackoverflow.com/questions/2941762/wpf-treeview-get-treeviewitem-in-previewmousedown-event

获取鼠标事件下的 TreeViewItem。如果当前发送者等于鼠标事件的 TreeViewItem,我将根据需要展开/折叠。否则,我只是忽略该事件而不执行任何操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

已处理的 RoutedEvent 继续在树中冒泡 的相关文章

随机推荐