c# - 已处理的 RoutedEvent 继续冒泡树

标签 c# wpf treeview treeviewitem routedevent

我正在开发一个基于 TreeView 的控件,我的双击事件继续使我的 TreeViewItem 节点冒泡。

目标是在双击时展开或折叠 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, get TreeViewItem in PreviewMouseDown event

获取鼠标事件下的 TreeViewItem。如果当前发件人等于鼠标事件的 TreeViewItem,我会根据需要展开/折叠。否则,我将忽略该事件,什么也不做。

关于c# - 已处理的 RoutedEvent 继续冒泡树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444523/

相关文章:

c# - C# 编译器会自动处理 IDisposable 对象吗?

c# - 如何等待 gRPC 服务器连接?

c# - TT c-> c# Ho 处理 typedef 枚举

Wpf:Trigger.Value 可以引用静态属性吗?

c# - 如何在 Prism 中使用 EventAggregator 控制事件处理程序的执行顺序

c# - 选择单个单选按钮,wpf

javascript - Google Orgchart 创造婚姻

c# - 如何禁用 TreeView 自动第一个节点选择

c# - 如何将 ReactiveUI 与分层数据源( TreeView )一起使用

c# - 事件处理程序未在动态按钮单击时触发