Как отключить поведение двойного щелчка в WPF TreeView? - PullRequest
10 голосов
/ 18 мая 2011

В моем TreeView у меня есть различные события для MouseDown / MouseUp и т. Д., Но когда я делаю это достаточно быстро, TreeView расширяет / сворачивает TreeNode.Я не хочу этого запутанного поведения.

Есть ли способ отключить это?

1 Ответ

17 голосов
/ 18 мая 2011

Вы можете подавить событие двойного щелчка 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;
}

UPDATE

Согласно MSDN Документы :

Хотя это перенаправленное событие кажется следовать по туннельному маршруту через элемент дерева, это на самом деле прямой перенаправленное событие, которое поднимается вдоль дерево элементов каждым элементом UIElement ... Контроль авторов, которые хотят справиться двойным щелчком мыши следует использовать Событие PreviewMouseLeftButtonDown при ClickCount равен двум. Это будет вызвать состояние 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;
    }
}

Я проверял это, и оно работает независимо от того, сколько раз я нажимаю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...