如何添加WPF树视图节点单击事件获取节点值
本文关键字:节点 视图 单击 事件 获取 WPF 何添加 添加 | 更新日期: 2023-09-27 18:14:19
我在wpf中有一个TreeView
,如何获得TreeView
节点单击事件,以便我可以获得用户单击的节点的值?
Xaml
<Grid Height="258" Width="275">
<TreeView Height="258" HorizontalAlignment="Left" Name="treeView1" VerticalAlignment="Top" Width="275">
</TreeView>
</Grid>
我已经从c#代码中填充了这个TreeView
。我需要在c#代码中编写什么事件方法来获取用户在c#代码中单击节点的值
加载后的代码
TreeViewItem treeItem = null;
treeItem = new TreeViewItem();
treeItem.Header = "Name";
由于没有可用于TreeViewItem或TreeView的点击事件,因此这里有可能的解决方法
在c#代码中有两个选项
使用MouseLeftButtonUp
将触发每次鼠标左键在项目上释放,这类似于点击
void preparemethod()
{
...
TreeViewItem treeItem = null;
treeItem = new TreeViewItem();
treeItem.Header = "Name";
treeItem.MouseLeftButtonUp += treeItem_MouseLeftButtonUp;
}
void treeItem_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
//your logic here
}
或使用Selected作为触发器,如果选中的元素被单击,则可能不会触发
void preparemethod()
{
...
TreeViewItem treeItem = null;
treeItem = new TreeViewItem();
treeItem.Header = "Name";
treeItem.Selected += treeItem_Selected;
}
void treeItem_Selected(object sender, RoutedEventArgs e)
{
//your logic here
}
在这两种方法中,发送方都是被单击的节点。你可以使用as
例子 void treeItem_Selected(object sender, RoutedEventArgs e)
{
TreeViewItem item = sender as TreeViewItem;
//you can access item properties eg item.Header etc.
//your logic here
}
如果你需要采用更MVVM友好的方法,你可以在你的TreeView ItemTemplate上使用一个交互触发器,并将命令与TreeView项目对象的参数绑定回你的父视图:
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubItems}">
<TextBlock Text="{Binding Header, Mode=OneWay}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonUp">
<i:InvokeCommandAction Command="{Binding DataContext.SelectedTreeViewItemClickedCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" CommandParameter="{Binding ElementName=trvMainMenu,Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
如果在树视图中添加了上下文菜单,则onclick事件只返回被单击的菜单项,即可视树。
获得实际树视图项的更好方法是执行以下步骤
- 为正在进行的操作命名
TreeView
,例如本例中的tView
。 - 在菜单的点击事件(或任何其他事件)中获取当前选中的项目
var node = tView.SelectedItem as TreeViewItem
如果当前没有选择项,则告诉用户选择该项并重新执行该过程。一旦选中,此时您就可以使用实际的树视图项并执行所需的操作。
<TreeView x:Name="tView"
HorizontalAlignment="Stretch" >
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem Click="CopyChildrenToClipboard"
Header="Copy Children To Clipboard">
<MenuItem.Icon>
<Image Source="assets/check_green.png"
Height="16" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>