WPF-删除事件处理程序由EventManager注册
本文关键字:EventManager 注册 程序 删除 事件处理 WPF- | 更新日期: 2023-09-27 18:26:30
我想删除的事件处理程序注册了以下代码
EventManager.RegisterClassHandler(typeof(TreeViewItem),
Mouse.MouseDownEvent,
new MouseButtonEventHandler(OnMouseButtonDown),
true);
请参阅此处。NET源
方法"OnMouseButtonDown"对我来说非常糟糕,因为方法"OnMouseButtonDown"调用了"HandleMouseButton Down"方法,当用户单击未选中项目中的三角形或单击鼠标右键时,他会查看选中的树项目。
当用户点击三角形时,我希望树项目只打开,但不会更改所选项目,也不会将视图滚动到所选项目。现在,由于"HandleMouseButtonDown",视图移动到所选项目,用户会丢失单击的项目。
那么,如何删除此事件处理程序?
在我看来,最好像这样抑制TreeViewItem的PreviewMouseDown
事件:
<TreeView TreeViewItem.PreviewMouseDown="TreeViewItem_PreviewMouseDown">
<TreeViewItem Header="1" IsExpanded="True" >
<TreeViewItem Header="2.1" >
<TreeViewItem Header="An Item" />
</TreeViewItem>
<TreeViewItem Header="2.2">
<TreeViewItem Header="An Item" />
</TreeViewItem>
<TreeViewItem Header="3.2">
<TreeViewItem Header="An Item" />
</TreeViewItem>
</TreeViewItem>
</TreeView>
private void TreeViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
//this will suppress the event
//e.Handled = true;
//instead of suppressing the event you can put your logic here to avoid what you want
}