对所有父项调用通过鼠标单击选择树视图项
本文关键字:单击 鼠标 选择 视图 调用 | 更新日期: 2023-09-27 18:34:51
我有一个简单的TreeView
类,在 WPF 应用程序中有几个TreeViewItem
(我自己的设计(。我希望选择正在单击的项目,这基本上非常简单。但是,每当用户单击不是根元素的元素时,都会为其所有父元素调用 MouseRightButtonUp
事件,从而导致也选择所有父节点。这是我的代码:
public class MyTreeViewItem : TreeViewItem
{
public MyTreeViewItem()
{
this.MouseRightButtonDown += MyTreeViewItem_MouseRightButtonDown ;
}
void MyTreeViewItem_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
if (sender as MyTreeViewItem != null)
(sender as MyTreeViewItem).IsSelected = true;
}
}
在调试器中,我发现确实为每个父级单独调用了MyTreeViewItem_MouseRightButtonDown
方法。如何避免这种情况?
WPF 中的路由事件具有 Handled
属性,可用于将其标记为已处理。
标记已处理的事件将限制路由事件对事件路由中的侦听器的可见性。该事件仍会遍历路由的其余部分,但只有在 AddHandler(RoutedEvent、Delegate、Boolean( 方法调用中专门使用 HandledEventsToo true 添加的处理程序才会在响应中被调用。
您可以在代码中设置e.Handled = true;
,它不会像这样继续触发事件:
public class MyTreeViewItem : TreeViewItem
{
public MyTreeViewItem()
{
this.MouseRightButtonDown += MyTreeViewItem_MouseRightButtonDown ;
}
void MyTreeViewItem_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
if (sender as MyTreeViewItem != null)
{
(sender as MyTreeViewItem).IsSelected = true;
e.Handled = true;
}
}
}