After double clicking on the child item of the treeview control in wpf, Expanded or MouseDoubleClick will execute twice TreeViewItem_MouseDoubleClick or TreeViewItem_Expanded How to solve the problem where I execute twice when I double-click on a sub item
`<TreeView
x:Name="Tree_Channel"
ItemsSource="{Binding TreeItems}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="Expanded" Handler="TreeViewItem_Expanded" />
<EventSetter Event="PreviewMouseDoubleClick" Handler="TreeViewItem_MouseDoubleClick"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
public Window1()
{
InitializeComponent();
DataContext = this;
TreeItems = new ObservableCollection<TreeNode>();
var rootNode1 = new TreeNode("Root 1");
var rootNode2 = new TreeNode("Root 2");
rootNode1.Children.Add(new TreeNode("Child 1"));
rootNode1.Children.Add(new TreeNode("Child 2"));
rootNode2.Children.Add(new TreeNode("Child 3"));
rootNode2.Children.Add(new TreeNode("Child 4"));
TreeItems.Add(rootNode1);
TreeItems.Add(rootNode2);
}
public ObservableCollection<TreeNode> TreeItems { get; set; }
private void TreeViewItem_Expanded(object sender, RoutedEventArgs e)
{
}
public class TreeNode
{
public string Name { get; set; }
public ObservableCollection<TreeNode> Children { get; set; }
public TreeNode(string name)
{
Name = name;
Children = new ObservableCollection<TreeNode>();
}
}
private void TreeViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
}
}
Issue you have is that parent item also handle mouse double click. You can filter it in the handler.
private void TreeViewItem_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
//Return, if parent item handler
if (sender != e.OriginalSource)
{
TreeViewItem tvi = null;
var visParent = VisualTreeHelper.GetParent(e.OriginalSource as FrameworkElement);
while (tvi == null && visParent != null)
{
tvi = visParent as TreeViewItem;
visParent = VisualTreeHelper.GetParent(visParent);
}
if (tvi == null || tvi != sender)
{
return;
}
}
e.Handled = true; // Stop expand behavior on double click
}