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的时候更是如此. 原因二:有 ...
随机推荐
- 15-spring学习-集合表达式
spring认为,数组和List集合是等价的. 要想操作list集合,利用“{内容,内容...}”的形式就可以完成了(类似数组). package com.Spring.ELDemo; import ...
- e.keycode详解
function submitLoginForm(e) { e = window.event || e; if(e.keyCode == 13) { login(); } } keycode 8 = ...
- Ubuntu下安装使用Xfce4
编辑于 2007-05-05 21:30 安装: 代码: sudo apt-get install xfce4 xfce4-taskbar-plugin (xfce4-taskb ...
- Sphinx高亮显示关键字
选取程序中使用的一部分代码: public function buildExcerptRows($ids) { $options = array( 'before_match' => '< ...
- RMAN检查数据库physical/logical corruption
1.检测physical corruption RMAN> backup validate database archivelog all; 2.检测logical corruption RMA ...
- ItelliJ项目打jar包
不是Eclipse里方便的export...了. 一.配置 . 点击View->Open Module Settings(快捷键是F4) . 在弹出的对话框中,点击最左侧树的Artifacts ...
- substr.js 字符串切割
substr.js 字符串切割 GitHub 以一个中文字的宽度为一个单位进行字符串切割 substr('南拳的妈妈1992', 4) // => 南拳的妈... substr('imliane ...
- node.js 操作excel 表格与XML文件常用的npm
在日常工作中会经常用到把一些excel表格文件转化为json,xml,js等格式的文件,下面就是我在日常中用到的这些npm. 1.node-xlsx: node-xlsx可以把excel文件转化为上面 ...
- 最简单的TCP网络封包解包(补充)-序列化
如若描述或者代码当中有谬误之处,还望指正. 将数据能够在TCP中进行传输的两种方法1.直接拷贝struct就可以了:2.序列化. 拷贝Struct存在的问题1.不能应付可变长类型的数据,比如STL中的 ...
- Linux下编译、使用静态库和动态库 自己测过的
每个程序实质上都会链接到一个或者多个的库.比如使用C函数的程序会链接到C运行时库,GUI程序会链接到窗口库等等.无论哪种情况,你都会要决定是链接到静态库(static libary)还是动态库(dyn ...