禁用WPF中DataGrid默认的鼠标左键拖动多选行的效果
2015-11-12 11:34
671 查看
最近项目上有需求要做DataGrid的行的拖拽功能, 有个很现实的问题就是鼠标左键按下是拖拽还是多选。查看了DataGrid的源码发现,系统内部会在鼠标按下的时候CaptureMouse,然后设置私有变量来保存多选标志, 在鼠标MouseMove的时候根据变量判断是否多选。
[align=left] private bool _isDraggingSelection; // Whether a drag select is being performed[/align][align=left]
[/align][align=left]
[/align][align=left]分析清楚了, 解决就好办了。我们只有在DataGrid的PreviewMouseMove里利用反射拿到这个私有变量,设置为false即可。[/align][align=left]
[/align][align=left]
[/align][align=left] private void DisableRowDraggingSelection( DataGrid dataGrid )[/align][align=left] {[/align][align=left] //Set _isDraggingSelection and disable system native drag selection feature.[/align][align=left] var property = typeof ( DataGrid ).GetField ([/align][align=left] "_isDraggingSelection" ,[/align][align=left] BindingFlags .Instance | BindingFlags. NonPublic | BindingFlags . IgnoreCase);[/align][align=left] if (property != null)[/align][align=left] {[/align][align=left] property .SetValue ( dataGrid, false );[/align][align=left] }[/align][align=left] }[/align][align=left]
[/align][align=left]
[/align]
[align=left] private bool _isDraggingSelection; // Whether a drag select is being performed[/align][align=left]
[/align][align=left]
[/align][align=left]分析清楚了, 解决就好办了。我们只有在DataGrid的PreviewMouseMove里利用反射拿到这个私有变量,设置为false即可。[/align][align=left]
[/align][align=left]
[/align][align=left] private void DisableRowDraggingSelection( DataGrid dataGrid )[/align][align=left] {[/align][align=left] //Set _isDraggingSelection and disable system native drag selection feature.[/align][align=left] var property = typeof ( DataGrid ).GetField ([/align][align=left] "_isDraggingSelection" ,[/align][align=left] BindingFlags .Instance | BindingFlags. NonPublic | BindingFlags . IgnoreCase);[/align][align=left] if (property != null)[/align][align=left] {[/align][align=left] property .SetValue ( dataGrid, false );[/align][align=left] }[/align][align=left] }[/align][align=left]
[/align][align=left]
[/align]
相关文章推荐
- Flex4 DataGrid中嵌入RadioButton实现思路及代码
- datagrid不可编辑行有关问题的控制方法
- C#及WPF获取本机所有字体和颜色的方法
- WPF MVVM示例讲解
- C#实现改变DataGrid某一行和单元格颜色的方法
- PowerShell中调用WPF生成炫酷窗口实例
- C#设置WinForm中DataGrid列的方法(列宽/列标题等)
- jquery+CSS3实现淘宝移动网页菜单效果
- WPF实现类似360安全卫士界面的程序源码分享
- C#中WPF使用多线程调用窗体组件的方法
- WinForm拖拽控件生成副本的解决方法
- WPF实现渐变淡入淡出的登陆窗口效果
- WPF的数据绑定详细介绍
- 支持IE,firefxo,chrome浏览器下鼠标拖动和拖拽的鼠标指针特效
- js实现完美拖拽效果可拖动层与回放拖动规迹并显示拖动距离参数
- Flex 自定义DataGrid实现根据条目某一属性值改变背景颜色
- WPF绑定实例详解
- 在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
- Javascript实现div的toggle效果实例分析
- JavaScript实现拖拽网页内元素的方法