我正在开发一个基于 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/