Wpf 如何使现有TreeView的TreeView项引发单击事件?
如何使现有WPF树视图的树视图项引发单击事件Wpf 如何使现有TreeView的TreeView项引发单击事件?,wpf,treeview,Wpf,Treeview,如何使现有WPF树视图的树视图项引发单击事件 目前,我们正在处理SelectedItemChanged。在本例中,我们正在显示对话框,因此用户可以多次单击同一个选定的TreeView项目。您是否尝试过使用MouseLeftButtonUp事件?您应该能够通过挂接到该事件来实现与实际单击事件相同的UX 并且可能也适用于您,具体取决于TreeView项目的布局(例如使用包含文本块的内容模板)。您可以在TreeView的ItemContainerStyle中使用事件设置器: <Tre
目前,我们正在处理SelectedItemChanged。在本例中,我们正在显示对话框,因此用户可以多次单击同一个选定的TreeView项目。您是否尝试过使用MouseLeftButtonUp事件?您应该能够通过挂接到该事件来实现与实际单击事件相同的UX
并且可能也适用于您,具体取决于TreeView项目的布局(例如使用包含文本块的内容模板)。您可以在
TreeView的ItemContainerStyle
中使用事件设置器:
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="TreeViewItem_MouseLeftButtonDown" />
</Style>
</TreeView.ItemContainerStyle>
工作样本
使用ItemContainerStyle
不适用于子项。移动到资源是有效的。单击鼠标左键而不是鼠标右键。
<Window x:Class="MenuExperiment1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow">
<TreeView Name="treeView1"
Height="320"
Width="200">
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<EventSetter Event="MouseLeftButtonUp"
Handler="treeViewItem_MouseLeftButtonUp" />
<EventSetter Event="KeyUp"
Handler="treeViewItem_KeyUp" />
</Style>
</TreeView.Resources>
<TreeViewItem Header="aa" />
<TreeViewItem Header="bb">
<TreeViewItem Header="b1"></TreeViewItem>
<TreeViewItem Header="b2"></TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="cc">
<TreeViewItem Header="c1">
<TreeViewItem Header="c1a"></TreeViewItem>
<TreeViewItem Header="c1b"></TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="c2"></TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="dd" />
</TreeView>
</Window>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Diagnostics;
namespace MenuExperiment1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void treeViewItem_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Handler(sender,e);
}
private void treeViewItem_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
Handler(sender, e);
}
}
private void Handler(object sender, InputEventArgs e)
{
e.Handled = true;
Debug.Write(((TreeViewItem)sender).Header);
Debug.WriteLine(" clicked");
}
}
}