WPF 树形右键菜单
作者:邱名涛
撰写时间:2019 年 8 月15日
前台代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TreeView Height="200" PreviewMouseRightButtonDown="TreeViewItem_PreviewMouseRightButtonDown" HorizontalAlignment="Left" Margin="12,0,0,0" Name="treeView1" VerticalAlignment="Top" Width="120">
<TreeViewItem Header="一级">
<TreeViewItem Header="一级子菜单"/>
<TreeViewItem Header="一级子菜单" />
<TreeViewItem Header="一级子菜单" />
</TreeViewItem>
<TreeViewItem Header="二级">
<TreeViewItem Header="二级子菜单" />
<TreeViewItem Header="二级子菜单" />
</TreeViewItem>
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem Header="创建类别(X)" Name="miClickMe" Click="miClickMe_Click">
<MenuItem.Icon>
<Image Source="/Images/png-0085.png"></Image>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="重命名(Y)" Name="miDontClickMe" Click="miDontClickMe_Click">
<MenuItem.Icon>
<Image Source="/Images/png-0085.png"></Image>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="删除类别(Z)" Name="miDontClickMes">
<MenuItem.Icon>
<Image Source="/Images/png-0085.png"></Image>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
</Grid>
</Window>
后台代码:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
var treeViewItem = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem;
if (treeViewItem != null)
{
treeViewItem.Focus();
e.Handled = true;
}
}
static DependencyObject VisualUpwardSearch<T>(DependencyObject source)
{
while (source != null && source.GetType() != typeof(T))
source = VisualTreeHelper.GetParent(source);
return source;
}
private void miClickMe_Click(object sender, RoutedEventArgs e)
{
Window1 df = new Window1();
df.ShowDialog();
}
private void miDontClickMe_Click(object sender, RoutedEventArgs e)
{
var node = treeView1.SelectedItem as TreeViewItem;
MessageBox.Show("别点我" + node.Header);
}
}
}
效果图片: