c# wpf treeview contextmenu

在 WPF 中,您可以使用 TreeView 控件来显示树形结构数据,而 ContextMenu 可以在用户右键单击时显示一个弹出菜单。以下是如何在 TreeView 上使用 ContextMenu 的步骤:

  • 在 XAML 中添加 TreeView 控件,设置 ItemsSource 属性为您的树形数据源:
  • <TreeView x:Name="MyTreeView" ItemsSource="{Binding MyTreeData}" />
    
  • 在 TreeView 上添加 ContextMenu 控件,设置 ContextMenu 的 ItemsSource 属性为您的菜单项数据源。您可以在菜单项数据源中指定每个菜单项的 Header、Command、Icon 等属性:
  • <TreeView.ContextMenu>
        <ContextMenu ItemsSource="{Binding MyContextMenuItems}">
            <ContextMenu.ItemContainerStyle>
                <Style TargetType="{x:Type MenuItem}">
                    <Setter Property="Header" Value="{Binding Header}" />
                    <Setter Property="Command" Value="{Binding Command}" />
                    <Setter Property="Icon" Value="{Binding Icon}" />
                </Style>
            </ContextMenu.ItemContainerStyle>
        </ContextMenu>
    </TreeView.ContextMenu>
    
  • 在菜单项的 Command 属性中指定要执行的命令。您可以使用自定义命令或预定义命令(例如 ApplicationCommands.Copy)。在执行命令时,可以通过 CommandParameter 属性传递参数,以便您可以识别要执行命令的树节点:
  • <ContextMenu ItemsSource="{Binding MyContextMenuItems}">
        <ContextMenu.ItemContainerStyle>
            <Style TargetType="{x:Type MenuItem}">
                <Setter Property="Header" Value="{Binding Header}" />
                <Setter Property="Command" Value="{Binding Command}" />
                <Setter Property="CommandParameter" Value="{Binding}" />
                <Setter Property="Icon" Value="{Binding Icon}" />
            </Style>
        </ContextMenu.ItemContainerStyle>
    </ContextMenu>
    
  • 在代码中,可以使用 TreeViewItem 的 ContextMenuOpening 事件来设置树节点的 ContextMenu。在此事件处理程序中,可以获取选定节点的 DataContext,以便您可以识别要显示的菜单项:
  • private void TreeViewItem_ContextMenuOpening(object sender, ContextMenuEventArgs e)
        TreeViewItem treeViewItem = sender as TreeViewItem;
        if (treeViewItem != null)
            MyTreeNode node = treeViewItem.DataContext as MyTreeNode;
            if (node != null)
                treeViewItem.ContextMenu.ItemsSource = node.ContextMenuItems;
    
  • 最后,将 TreeViewItem 的 ContextMenuOpening 事件与事件处理程序关联:
  • <TreeView x:Name="MyTreeView" ItemsSource="{Binding MyTreeData}">
        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <EventSetter Event="ContextMenuOpening" Handler="TreeViewItem_ContextMenuOpening" />
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>
    

    以上是在 WPF 中使用 TreeView 和 ContextMenu 的基本步骤。希望对您有所帮助。

  • 4年前
  •