返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >对WPF中的TreeView实现右键选定
  • 327
分享到

对WPF中的TreeView实现右键选定

2024-04-02 19:04:59 327人浏览 八月长安
摘要

在WPF中,TreeView默认情况是不支持右键选定的,也就是说,当右键点击某节点时,是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时,往往希望在弹出菜单的同时

WPF中,TreeView默认情况是不支持右键选定的,也就是说,当右键点击某节点时,是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时,往往希望在弹出菜单的同时选中该节点,以使得菜单针对选中的节点生效。

图1:虽然是在GNU节点上弹出的右键菜单,但选中的节点仍然是上次左键单击的DOC节点。
图2:弹出的右键菜单同时选中GNU节点才是我们所需要的效果

实现这个功能并不是很难,我最开始的做法就是目前网上流行的版本:

  • 在TreeViewItem中响应PreviewMouseRightButtonDown事件

  • 在响应右键单击事件前选中sender(TreeViewItem)节点。

private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    var treeViewItem = sender as TreeViewItem;
    if (treeViewItem != null)
    {
        treeViewItem.Focus();
        e.Handled = true;
    }
}

但这样做还存在一个问题:当选择子节点时,sender并不是子节点的TreeViewItem,而是其父节点。导致无法选择选择子节点。如下图所示:

要解决这个问题也不难,那就是根据MouseButtonEventArgs的OriginalSource来获取节点。但是OriginalSource也不是TreeViewItem,而是产生鼠标事件的子控件,因此还得往上查找,从而找到所属的TreeViewItem。

最终的解决方案如下:

1. 在TreeViewItem中响应PreviewMouseRightButtonDown事件

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="TreeViewItem_PreviewMouseRightButtonDown"/>
    </Style>
</TreeView.ItemContainerStyle>

2. 在响应右键单击事件前选中TreeViewItem节点。

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

现在才是一个比较完美的解决方案。  

到此这篇关于WPF实现右键选定TreeView的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 对WPF中的TreeView实现右键选定

本文链接: https://lsjlt.com/news/151804.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 对WPF中的TreeView实现右键选定
    在WPF中,TreeView默认情况是不支持右键选定的,也就是说,当右键点击某节点时,是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时,往往希望在弹出菜单的同时...
    99+
    2024-04-02
  • WPF:在 MVVM 中绑定 TreeView 的分步教程
    以下是在MVVM中绑定TreeView的分步教程:步骤1:创建一个新的WPF项目。在项目中添加一个ViewModel类和一个Mode...
    99+
    2023-09-26
    WPF
  • WPF弹出右键菜单时判断鼠标是否选中该项
    和上篇在WPF的TreeView中实现右键选定一样,这仍然是一个右键菜单的问题: 这个需求是在一个实现剪贴板的功能的时候遇到的:在弹出右键菜单时,如果菜单弹出位置在ListViewI...
    99+
    2024-04-02
  • jquery如何实现treeview的级联选择
    这篇文章给大家分享的是有关jquery如何实现treeview的级联选择的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   jquery.treeview的使...
    99+
    2024-04-02
  • JS如何实现自定义右键菜单
    这篇文章主要介绍了JS如何实现自定义右键菜单,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。示例:<div id="...
    99+
    2024-04-02
  • vue实现自定义全局右键菜单
    前段时间公司在做一个webIDE项目,其中有对文件树的各种操作,主要通过右键菜单实现,今天就来记录一下怎么在vue项目中实现全局的自定义右键菜单。效果如图所示: 注意: 需要在项目...
    99+
    2024-04-02
  • Winform中怎么利用TreeView实现节点定位
    Winform中怎么利用TreeView实现节点定位,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Winform里面的TreeView节点定位是一种常见的、功能强大的控件,一般...
    99+
    2023-06-17
  • WPF自定义控件的实现
    方式一:基于现有控件进行扩展,如基于button进行扩展,UI可直接用xmal进行编辑设计,逻辑用xaml.cs进行编辑 方法二:直接创建wpf自定义控件 本文用方法二开展自定义...
    99+
    2023-03-03
    WPF自定义控件
  • 在WPF中实现全局快捷键功能
    今天写一个小程序中使用到了全局快捷键,找到了我之前写的文章在c#中使用全局快捷键翻了一下,发现它是WinForm版本的,而我现在大部分写WPF程序了,便将其翻译了为WPF版本的了。 ...
    99+
    2024-04-02
  • WPF实现带筛选功能的DataGrid
    目录涉及知识点示例截图核心源码不足与思考涉及知识点 在本示例中,从数据绑定,到数据展示,涉及知识点如下所示: DataGrid,要WPF提供的进行二维数据展示在列表控件,默认功能非常...
    99+
    2023-03-01
    WPF实现DataGrid筛选功能 WPF DataGrid筛选 WPF DataGrid
  • C#中WPF颜色对话框控件的实现
    在 C# WPF开发中颜色对话框控件(ColorDialog)用于对界面中的背景、文字…(拥有颜色属性的所有控件)设置颜色,例如设置标签控件的背景色。 颜色对话框的运行...
    99+
    2024-04-02
  • vue怎么实现自定义全局右键菜单
    本篇内容介绍了“vue怎么实现自定义全局右键菜单”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果如图所示:注意:需要在项目中找到页面整体布...
    99+
    2023-06-29
  • GridView绑定数据的实现-wpf数据绑定
    在WPF中,可以通过以下步骤实现GridView的数据绑定:1. 创建一个数据模型类,用于表示你要绑定的数据对象。该类应该实现INo...
    99+
    2023-09-22
    GridView
  • WPF如何实现带筛选功能的DataGrid
    这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WPF如何实现带筛选功能的DataGrid”吧!涉及知识点在本示例中,从数据绑定,...
    99+
    2023-07-05
  • WPF实现监听快捷键的方式分享
    目录1.调用Win32 API2.监听WPF的KeyDown事件3.XAML绑定命令方式4.细节5.DEMO1.调用Win32 API 优先级最高,全局监听, 支持最小化失焦等情况 ...
    99+
    2023-03-20
    WPF监听快捷键 WPF 快捷键 WPF监听
  • WPF实现自带触控键盘的文本框
    一 引入 项目有个新需求,当点击或触碰TextBox时,基于TextBox的相对位置,弹出一个自定义的Keyboard,如下图所示: 二 KeyboardControl 先实现一个...
    99+
    2024-04-02
  • JavaRedisTemplate批量查询指定键值对的实现
    目录一.Redis使用pipeline批量查询所有键值对二.批量获取指定的键值对列表一.Redis使用pipeline批量查询所有键值对 一次性获取所有键值对的方式: private...
    99+
    2024-04-02
  • jQuery如何实现自定义元素右键点击事件
    这篇文章给大家分享的是有关jQuery如何实现自定义元素右键点击事件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先要将阻止弹出函数绑定到目标元素上://阻止浏览器默认右键点击...
    99+
    2024-04-02
  • css伪类右下角点击出现对号角标表示选中的实现方法
    这篇文章给大家分享的是有关css伪类右下角点击出现对号角标表示选中的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果:css:.s_type {    ...
    99+
    2023-06-08
  • jquery中ztree如何实现右键收藏功能
    这篇文章主要为大家展示了“jquery中ztree如何实现右键收藏功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jquery中ztree如何实现右键收藏功能...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作