WPF-datagrid右键菜单时先选中某行
如题,很多时候,在datagrid中右键菜单时,当前没有选中行。
这就很恶心了对不,如果我是对某一行进行处理,难道还要先用左键选中这一行?
博主就被这个恶心了一把,然后在大佬博客帮助下找到了一个方法,(命中测试)。这个的原理是如果在鼠标没有选中某行的情况下进行右键,会判断鼠标位置,然后根据位置找到当前层级,默认选中最高的也就是最外边那一层,也就是我们的“行”。
然后根据大佬博客总结了一下代码:
private void files_list_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
// 获取坐标
Point p = e.GetPosition((ItemsControl)sender);
// 通过指定 Point 返回命中测试的最顶层 Visual 对象。
HitTestResult htr = VisualTreeHelper.HitTest((ItemsControl)sender, p);
TextBlock o = htr.VisualHit as TextBlock;
if (o != null) {
DataGridRow dgr = GetParentObject<DataGridRow>(o) as DataGridRow;
dgr.Focus();
dgr.IsSelected = true;
}
}
public T GetParentObject<T>(DependencyObject obj) where T : FrameworkElement
{
DependencyObject parent = VisualTreeHelper.GetParent(obj);
while (parent != null) {
if (parent is T) {
return (T)parent;
}
parent = VisualTreeHelper.GetParent(parent);
}
return null;
}
这个方法也可以应用到不只是行,可以用于整个表。或是其他,只要修改层级就可以了。
但是wuli BOSS说了,这个方法治标不治本,命中测试不是这么搞得。让我去找微软官方的函数
WPF-datagrid右键菜单时先选中某行的更多相关文章
- WPF datagrid 弹出右键菜单时先选中该项
private void datagrid_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { ...
- 在WPF中弹出右键菜单时判断鼠标是否选中该项
和上篇在WPF的TreeView中实现右键选定一样,这仍然是一个右键菜单的问题: 这个需求是在一个实现剪贴板的功能的时候遇到的:在弹出右键菜单时,如果菜单弹出位置在ListViewItem中时,我 ...
- 【WPF】右键菜单ContextMenu可点击区域太小的问题
问题描述 正常使用右键菜单ContextMenu时,如果菜单项是不变的,可以直接在XAML中写死,如下是给一个Button按钮添加了右键菜单功能. <Button Content="T ...
- WPF实现右键菜单
ContextMenu类就是用来做右键菜单的对象,对于任何的控件都可以进行对ContextMenu属性的操作进行设置右键菜单的功能. 下面代码就是对一个按钮添加一个WPF右键菜单的功能: < B ...
- WPF DataGrid 使用CellTemplateSelector 时SelectTemplate方法Item参数为NULL
首先说明 在SelectTemplate中并Item参数并不是真的一直为Null.而是先执行空参数,之后再会执行有参数的. 至于原因 我也不知道... 具体验证过程是 也就说 做好非空检测即可
- js禁用页面上右键菜单、选中和复制
有时候我们不想页面上的内容被人复制走,那么就可以使用js对页面进行设置,禁止右键菜单.禁止选中.禁止复制等功能可以有效的达到这个效果,js代码如下所示: /** * 禁用右键菜单 */ documen ...
- Qt:QT右键菜单
Qt QTableView 上加右键弹出菜单, 并复制选中的单元格内容到剪贴板中 http://wenku.baidu.com/view/c51cfb63cf84b9d528ea7a29.html h ...
- 几款jQuery右键菜单插件介绍
在网页中使用自定义右键菜单,实现上皆为使用javascript禁用浏览器默认的右键菜单,然后在网页中响应鼠标右键事件,弹出自定义的菜单. 类似右键菜单的组件网上很多.一般而言,改变浏览器的默认菜单应当 ...
- Msbuild项目集成右键菜单编译
DS1.背景: 我们为什么要将VS2008命令行编译.sln文件集成到右键菜单呢? 原因一:VS2008很好很强大,但太费系统资源了,尤其是在虚拟机在里面装VS2008的时候更是如此. 原因二:有 ...
随机推荐
- webservice接口示例(spring+xfire+webservice)
webservice接口示例(spring+xfire+webservice) CreateTime--2018年4月2日17:36:07 Author:Marydon 一.准备工作 1.1 ja ...
- OFBiz:扩展controller.xml
如何扩展controller.xml?两种方法:一种方法是直接修改原先的controller.xml,这种方法不方便后续升级.第二种方法是新建一个extended.xml文件,再在controller ...
- Android 8款开源游戏引擎
1.Angle (2D Java) Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发.该引擎全部用Java代码编写,并且可以根据自己 ...
- 使用WindowsAPI获取录音音频
本文实例介绍了使用winmm.h进行音频流的获取的方法,具体步骤如下: 一.首先需要包含以下引用对象 ? 1 2 3 #include <Windows.h> #include " ...
- Spark SQL and DataFrame Guide(1.4.1)——之DataFrames
Spark SQL是处理结构化数据的Spark模块.它提供了DataFrames这样的编程抽象.同一时候也能够作为分布式SQL查询引擎使用. DataFrames DataFrame是一个带有列名的分 ...
- 关于php使用基于socket Web消息推送(未完)
转:http://blog.csdn.net/young_phper/article/details/52441143 http://www.workerman.net/ http://blog.cs ...
- laravel路由之分组路由
laravel下的分组路由可以嵌套如下: Route::group(['prefix'=>'admin'],function(){ Route::group(['prefix'=>'dtk ...
- union共用体的对齐
union DATE { char a; ]; double b; }; DATE max; cout<< sizeof(max) << endl; 这个问题很好回答,并且我把 ...
- vim -d file01 file02 diff file01 file02 对比两文件的不同
[root@86 vhosts]# vim -d defaul.conf.bak zabbix.xinxianm.com.conf server { | server { listen 80; | l ...
- CXCommon.h工具类
#ifndef __XCOMMON_H__ #define __XCOMMON_H__ /******************************************************* ...