我想删除使用以下代码注册的事件处理程序
EventManager.RegisterClassHandler(typeof(TreeViewItem),
Mouse.MouseDownEvent,
new MouseButtonEventHandler(OnMouseButtonDown),
true);
参见here .NET sourse
方法' OnMouseButtonDown'对我来说非常糟糕,因为方法' OnMouseButtonDown'致电' HandleMouseButtonDown'方法,当用户点击未选中项目中的三角形或点击鼠标右键时,他带来查看所选树项目。
当用户点击三角形时,我希望树项目只是打开,但不会更改所选项目,也不会将视图滚动到所选项目。现在因为' HandleMouseButtonDown'视图移动到所选项目,用户将丢失单击它的项目。
那我怎么能删除这个事件处理程序呢?
答案 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
}