十字星

  • 首页
  • 技术
  • 随笔
  • 瞎折腾
  • 平面设计
  • 文集
  • 留言
  • 其他
    • API测试
  1. 首页
  2. 技术
  3. 正文

WPF中TreeView设置鼠标右键菜单

2019-09-30 1368点热度 1人点赞 0条评论

1.设置TreeView对象,代码

<Window x:Class="WpfApp1.Window1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:local="clr-namespace:WpfApp1" 
        mc:Ignorable="d" Title="Window1" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TreeView x:Name="treeView" PreviewMouseRightButtonDown="TreeView_PreviewMouseRightButtonDown">
            <TreeViewItem Header="节点1" Name="node1"/>
            <TreeViewItem Header="节点2" Name="node2" IsExpanded="True">
                <TreeViewItem Header="[节点2[一级子菜单1" Name="node21"/>
                <TreeViewItem Header="[节点2]一级子菜单2" Name="node22">
                    <TreeViewItem Header="{}{[节点2]一级子菜单2}二级子菜单1" Name="node221"/>
                    <TreeViewItem Header="{}{[节点2]一级子菜单2}二级子菜单2" Name="node222"/>
                </TreeViewItem>
                <TreeViewItem Header="[节点2]一级子菜单3" Name="node23"/>
                <TreeViewItem Header="[节点2]一级子菜单4" Name="node24"/>
            </TreeViewItem>
        </TreeView>
        <GridSplitter Width="5" Background="#FF3768EA"></GridSplitter>
    </Grid>
</Window>

界面预览

2.菜单注册事件为 PreviewMouseRightButtonDown事件,事件代码如下

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;

namespace WpfApp1
{
    /// <summary>
    /// Window1.xaml 的交互逻辑
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void TreeView_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            var treeViewItem = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem;
            if (treeViewItem != null)
            {
                treeViewItem.Focus();
                e.Handled = true;

                ContextMenu contextMenu = new ContextMenu();
                MenuItem menuItem = new MenuItem() { Header = treeViewItem.Header };
                menuItem.Click += delegate { MessageBox.Show("右键菜单,选中节点为[" + treeViewItem.Header + "]"); };
                contextMenu.Items.Add(menuItem);

                if (treeViewItem.Name == "node221")
                {
                    menuItem = new MenuItem() { Header = treeViewItem.Header + "专用功能" };
                    menuItem.Click += delegate { MessageBox.Show("专用功能,\r\n\r\n选中节点为[" + treeViewItem.Header + "]"); };
                    contextMenu.Items.Add(menuItem);
                }
                else if (treeViewItem.Name == "node21")
                {
                    menuItem = new MenuItem() { Header = treeViewItem.Header + "专用右键菜单" };
                    menuItem.Click += delegate { MessageBox.Show("专用右键菜单,\r\n\r\n选中节点为[" + treeViewItem.Header + "]"); };
                    contextMenu.Items.Add(menuItem);
                }

                this.treeView.ContextMenu = contextMenu;

            }
        }

        static DependencyObject VisualUpwardSearch<T>(DependencyObject source)
        {
            while (source != null && source.GetType() != typeof(T))
                source = VisualTreeHelper.GetParent(source);

            return source;
        }
    }
}

3.运行结果

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: C# TreeView WPF
最后更新:2019-09-30

cxw

技术宅,最喜瞎折腾.

点赞
< 上一篇
下一篇 >
最新 热点 随机
最新 热点 随机
git迁移项目中的某个目录到新项目 winform判断设计模式还是运行时模式 C# 中的where T : class, new() 到底是什么意思? 解决安装.NET失败并提示“无法建立到信任根颁发机构的证书链” 关闭.net4.0的http访问默认代理 删除名称最后带空格的文件夹
解决安装.NET失败并提示“无法建立到信任根颁发机构的证书链” git迁移项目中的某个目录到新项目 Hyper-V安装无桌面版CentOS 6.5并配置自启动redis服务之二:在虚拟机中安装CentOS 6.5 Robots文件限制问题 Windows创建软连接 [转]屏蔽系统热键的方法总结
标签聚合
Excel IT Linux WordPress WinForm MySQL C# W10 PHP CentOS
最近评论
alex 发布于 4 年前(01月22日) 博主,请问把代码贴到博客里可以复制是怎么实现的

COPYRIGHT © 2021 十字星. ALL RIGHTS RESERVED

THEME KRATOS MADE BY VTROIS

京ICP备2020032489号-2