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

时间:2015-12-12 20:21:02

标签: c# .net wpf vb.net events

我想删除使用以下代码注册的事件处理程序

EventManager.RegisterClassHandler(typeof(TreeViewItem),
       Mouse.MouseDownEvent,
       new MouseButtonEventHandler(OnMouseButtonDown),
       true);

参见here .NET sourse

方法' OnMouseButtonDown'对我来说非常糟糕,因为方法' OnMouseButtonDown'致电' HandleMouseButtonDown'方法,当用户点击未选中项目中的三角形或点击鼠标右键时,他带来查看所选树项目。

当用户点击三角形时,我希望树项目只是打开,但不会更改所选项目,也不会将视图滚动到所选项目。现在因为' HandleMouseButtonDown'视图移动到所选项目,用户将丢失单击它的项目。

那我怎么能删除这个事件处理程序呢?

1 个答案:

答案 0 :(得分:0)

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