在 WPF 中,您可以使用 TreeView 控件来显示树形结构数据,而 ContextMenu 可以在用户右键单击时显示一个弹出菜单。以下是如何在 TreeView 上使用 ContextMenu 的步骤:
<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 的基本步骤。希望对您有所帮助。