如何添加WPF treeView节点Click事件以获取节点值

wooyq4lh  于 2023-02-05  发布在  其他
关注(0)|答案(3)|浏览(1249)

我在wpf中有一个TreeView,如何获取TreeView节点单击事件,以便获得用户单击的节点的值?
X射线

<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";
7rfyedvj

7rfyedvj1#

由于没有可用于TreeViewItem或TreeView的Click事件,因此以下是可能的解决方法
在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
    }

或使用选定项作为触发器,则在单击选定元素时可能不会触发

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
    }

在这两个方法中发送者是这节点已经被点击.你能使用作为
范例

void treeItem_Selected(object sender, RoutedEventArgs e)
    {
        TreeViewItem item = sender as TreeViewItem;
        //you can access item properties eg item.Header etc. 
        //your logic here 
    }
vfwfrxfs

vfwfrxfs2#

如果您需要采取更MVVM友好的方法,可以在TreeView ItemTemplate上使用交互触发器,并将带有treeview项目对象参数的命令绑定回父ViewModel:

<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>
z2acfund

z2acfund3#

如果您已将上下文菜单添加到树视图中,onclick事件仅返回单击它的菜单项,即可视化树。
获取实际树视图项的更好方法是执行以下步骤
1.将正在执行相关操作的TreeView命名为tView,例如本例中的tView
1.在菜单的单击事件(或实际上任何其他事件)中获取当前选定的项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>

相关问题