您的位置:首页 > 其它

禁用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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  wpf datagrid 拖拽 多选