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