在我的TreeView
中,MouseDown
/ MouseUp
等有不同的事件,但当我快速完成时,TreeView
会展开/折叠TreeNode
}。我不想要这种烘焙行为。
有没有办法禁用它?
答案 0 :(得分:17)
您可以像这样抑制TreeViewItem的双击事件:
XAML:
<TreeView DockPanel.Dock="Left" TreeViewItem.PreviewMouseDoubleClick="TreeViewItem_PreviewMouseDoubleClick">
<TreeViewItem Header="Node Level 1" IsExpanded="True" >
<TreeViewItem Header="Node Level 2.1" >
<TreeViewItem Header="MyItem" />
</TreeViewItem>
<TreeViewItem Header="Node Level 2.2">
<TreeViewItem Header="MyItem" />
</TreeViewItem>
</TreeViewItem>
</TreeView>
代码:
private void TreeViewItem_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
//this will suppress the event that is causing the nodes to expand/contract
e.Handled = true;
}
<强>更新强>
根据msdn docs:
虽然这个路由事件似乎 沿着一条隧道穿过一条隧道 元素树,它实际上是直接的 沿着提升的路由事件 每个UIElement的元素树...... 控制想要处理的作者 鼠标双击应该使用 PreviewMouseLeftButtonDown事件时 ClickCount等于2。这将 导致Handled状态 在案件中适当传播 其中元素中的另一个元素 树处理事件。
我不确定这是否是您遇到问题的原因,但我们会以MSDN方式进行操作并改为使用PreviewMouseLeftButtonDown
:
XAML:
<TreeView DockPanel.Dock="Left" TreeViewItem.PreviewMouseLeftButtonDown="TreeView_PreviewMouseLeftButtonDown">
<TreeViewItem Header="Node Level 1" IsExpanded="True">
<TreeViewItem Header="Node Level 2.1" >
<TreeViewItem Header="MyItem" />
</TreeViewItem>
<TreeViewItem Header="Node Level 2.2">
<TreeViewItem Header="MyItem" />
</TreeViewItem>
</TreeViewItem>
</TreeView>
代码:
private void TreeView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount > 1)
{
//here you would probably want to include code that is called by your
//mouse down event handler.
e.Handled = true;
}
}
我已经对此进行了测试,无论我点击多少次都可以使用
答案 1 :(得分:0)
如果要防止DoubleClick上的TreeView展开/折叠,但同时为此事件使用命令,则可以使用以下解决方案: