C# 上下文菜单和树视图
我如何创建一个上下文菜单,当用户右键单击我的树视图的一个元素时,它会显示出来 我想得到被点击项目的名称,这怎么可能 这是我的树视图:C# 上下文菜单和树视图,c#,wpf,treeview,contextmenu,C#,Wpf,Treeview,Contextmenu,我如何创建一个上下文菜单,当用户右键单击我的树视图的一个元素时,它会显示出来 我想得到被点击项目的名称,这怎么可能 这是我的树视图: <TreeView Name="tvwResultados" MouseMove="DataGrid_MouseMove" MouseLeftButtonDown="DataGrid_PreviewMouseLeftButtonDown" ItemT
<TreeView Name="tvwResultados"
MouseMove="DataGrid_MouseMove"
MouseLeftButtonDown="DataGrid_PreviewMouseLeftButtonDown"
ItemTemplate="{StaticResource empresaTemplate}"
ItemsSource="{Binding Empresas}"
Padding="0,6,0,6"
Background="Black"
BorderBrush="Gray"
BorderThickness="1">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Padding" Value="4,2,4,2" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Gray" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#171717" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Silver" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#333333" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Silver" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Gray" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Silver" />
</TreeView.Resources>
</TreeView>
根据许多因素,有几种方法可以将
上下文菜单添加到树视图项中。例如,ContextMenu
对于每个TreeViewItem
是否相同?菜单项从哪里来
一种解决方案是在ItemContainerStyle
中添加一个ContextMenu
。您可以将ContextMenu
定义为窗口中的资源
或顶级控件的任何内容:
<Window.Resources>
<ContextMenu x:Key="TreeItemMenu">
<MenuItem Header="Menu Item 1" Click="MenuItem_Click_1"/>
<MenuItem Header="Menu Item 2" Click="MenuItem_Click_2"/>
</ContextMenu>
</Window.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Padding" Value="4,2,4,2" />
<Setter Property="ContextMenu" Value="{DynamicResource TreeItemMenu}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Gray" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
要获取单击的项目,您需要单独处理该项目。您可以使用EventSetter
将事件附加到每个treevieItem
,然后跟踪上次单击的项目,如下所示:
<Window.Resources>
<ContextMenu x:Key="TreeItemMenu">
<MenuItem Header="Menu Item 1" Click="MenuItem_Click_1"/>
<MenuItem Header="Menu Item 2" Click="MenuItem_Click_2"/>
</ContextMenu>
</Window.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Padding" Value="4,2,4,2" />
<Setter Property="ContextMenu" Value="{DynamicResource TreeItemMenu}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Gray" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
将其添加到样式的设置器:
<EventSetter Event="MouseRightButtonDown" Handler="OnTreeItemClicked"/>
这将向每个树视图项
添加相同的上下文菜单
,并对菜单项
进行硬编码,不过它演示了如何添加上下文菜单
。你当然可以变得更灵活/动态/先进,但这会给你入门的基础。 更容易…将工具箱中的ContextMenuStrip添加到设计视图中。根据您的意愿添加菜单选项(如果您愿意,请重命名名称或将其保留在ContextMenuStrip1中。然后,您只需在设计模式下选择TreeView、属性并设置上下文菜单