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",视图移动到所选项目,用户会丢失单击的项目。

那么,如何删除此事件处理程序?

WPF-删除事件处理程序由EventManager注册

在我看来,最好像这样抑制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
}