WPF 树形右键菜单

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);
        }
    }
}

效果图片:在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Q_MingTao/article/details/99640072
WPF