在我的TreeView
中,我有不同的事件用于MouseDown
/MouseUp
等,但是当我操作速度足够快时,TreeView
会展开/折叠TreeNode
。我不想要这种内置行为。
有没有一种方法可以禁用这个行为?
<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 文档:
尽管这个路由事件似乎是通过元素树进行的隧道路由,但实际上它是由每个UIElement沿着元素树引发的直接路由事件......如果控件作者想要处理鼠标双击事件,当ClickCount为2时,应该使用PreviewMouseLeftButtonDown事件。这将导致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;
}
}
我已测试过这个,它可以在无论我点击多少次的情况下都能正常工作。
PreviewMouseDoubleClick
而不是 TreeViewItem.PreviewMouseDoubleClick
,这有关系吗? - Joan Venge