如何禁用WPF TreeView中的双击行为?

时间:2011-05-17 22:24:26

标签: c# .net wpf treeview

在我的TreeView中,MouseDown / MouseUp等有不同的事件,但当我快速完成时,TreeView会展开/折叠TreeNode }。我不想要这种烘焙行为。

有没有办法禁用它?

2 个答案:

答案 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展开/折叠,但同时为此事件使用命令,则可以使用以下解决方案:

https://stackoverflow.com/a/60869105/1206431