博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF DataGrid Drag
阅读量:7078 次
发布时间:2019-06-28

本文共 5746 字,大约阅读时间需要 19 分钟。

自己实现的功能、代码比较简单的DataGrid的Drag处理,着重处理DataGrid里的拖动排序。

1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using System.Windows;  6 using System.Windows.Controls;  7 using System.Windows.Data;  8 using System.Windows.Documents;  9 using System.Windows.Input; 10 using System.Windows.Media; 11 using System.Windows.Media.Imaging; 12 using System.Windows.Navigation; 13 using System.Windows.Shapes; 14 using System.Collections.ObjectModel; 15  16 namespace CodeTest.DataGridDragDrop 17 { 18     public partial class Page_DataGridDragDrop : Page 19     { 20         ObservableCollection
list1; 21 ObservableCollection
list2; 22 Point TargetMousePoint;//Drag时Mouse的Point 23 24 public Page_DataGridDragDrop() 25 { 26 InitializeComponent(); 27 InitializeDataGrid1(); 28 InitializeDataGrid2(); 29 } 30 private void InitializeDataGrid1() 31 { 32 list1 = new ObservableCollection
(); 33 list1.Add(new Model_DataGrid { Id = 1, Name = "N1" }); 34 list1.Add(new Model_DataGrid { Id = 2, Name = "N2" }); 35 list1.Add(new Model_DataGrid { Id = 3, Name = "N3" }); 36 list1.Add(new Model_DataGrid { Id = 4, Name = "N4" }); 37 list1.Add(new Model_DataGrid { Id = 5, Name = "N5" }); 38 list1.Add(new Model_DataGrid { Id = 6, Name = "N6" }); 39 list1.Add(new Model_DataGrid { Id = 7, Name = "N7" }); 40 list1.Add(new Model_DataGrid { Id = 8, Name = "N8" }); 41 list1.Add(new Model_DataGrid { Id = 9, Name = "N9" }); 42 this.DataGrid1.ItemsSource = list1; 43 } 44 private void InitializeDataGrid2() 45 { 46 list2 = new ObservableCollection
(); 47 list2.Add(new Model_DataGrid { Id = 1, Name = "Na1" }); 48 list2.Add(new Model_DataGrid { Id = 2, Name = "Na2" }); 49 list2.Add(new Model_DataGrid { Id = 3, Name = "Na3" }); 50 list2.Add(new Model_DataGrid { Id = 4, Name = "Na4" }); 51 list2.Add(new Model_DataGrid { Id = 5, Name = "Na5" }); 52 list2.Add(new Model_DataGrid { Id = 6, Name = "Na6" }); 53 this.DataGrid2.ItemsSource = list2; 54 } 55 ///
56 /// 拖动处理 57 /// 58 ///
59 ///
60 private void DataGrid1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 61 { 62 Model_DataGrid DraggedItem = null;//源Row 63 Model_DataGrid TargetItem = null;//目标Row 64 //查找鼠标点击的源Row 65 IInputElement element = DataGrid1.InputHitTest(e.GetPosition(DataGrid1)); 66 while(element != DataGrid1) 67 { 68 if(element != null && element is DataGridRow) 69 { 70 DataGrid1.SelectedItem = ((DataGridRow)element).Item; 71 DraggedItem = (Model_DataGrid)DataGrid1.SelectedItem; 72 break; 73 } 74 else 75 { 76 DataGrid1.SelectedItem = null; 77 element = System.Windows.Media.VisualTreeHelper.GetParent(element as System.Windows.DependencyObject) as System.Windows.IInputElement; 78 } 79 } 80 81 if(this.DataGrid1.SelectedCells.Count > 0) 82 { 83 Model_DataGrid DragData = this.DataGrid1.SelectedCells[0].Item as Model_DataGrid; 84 DragDrop.DoDragDrop(DataGrid1, DragData, DragDropEffects.Move); 85 //拖动结束 86 element = DataGrid1.InputHitTest(TargetMousePoint); 87 while (element != DataGrid1) 88 { 89 if (element != null && element is DataGridRow) 90 { 91 TargetItem = (Model_DataGrid)((DataGridRow)element).Item; 92 break; 93 } 94 else 95 { 96 element = System.Windows.Media.VisualTreeHelper.GetParent(element as System.Windows.DependencyObject) as System.Windows.IInputElement; 97 } 98 } 99 //处理排序100 if (TargetItem != null && !ReferenceEquals(DraggedItem, TargetItem))101 {102 //remove the source from the list103 list1.Remove(DraggedItem);104 105 //get target index106 var targetIndex = list1.IndexOf(TargetItem);107 108 //move source at the target's location109 list1.Insert(targetIndex, DraggedItem);110 111 //select the dropped item112 DataGrid1.SelectedItem = DraggedItem;113 }114 }115 }116 117 private void DataGrid2_Drop(object sender, DragEventArgs e)118 {119 IDataObject data = new DataObject();120 data = e.Data;121 Model_DataGrid obj = (Model_DataGrid)data.GetData(typeof(Model_DataGrid));122 Console.WriteLine(obj.Name);123 }124 ///
125 /// 获取拖动结束时鼠标的Point126 /// 127 ///
128 ///
129 private void DataGrid1_DragOver(object sender, DragEventArgs e)130 {131 TargetMousePoint = e.GetPosition(DataGrid1);132 }133 }134 }

 

转载于:https://www.cnblogs.com/yhnbgfd/p/3792806.html

你可能感兴趣的文章
Koa (koajs) 基于 Node.js 平台的下一代 web 开发框架
查看>>
ext表格grid----重写applySort方法,使支持按中文首字母排序
查看>>
使用git命令提取两次提交之间的差异文件
查看>>
node.js REPL
查看>>
面试问题
查看>>
dhcp在企业网中的应用(案例)
查看>>
nginx(7):使用nginx的proxy_cache做网站缓存
查看>>
C++ explicit
查看>>
AngularJS内置指令
查看>>
冒泡排序算法分析
查看>>
Go函数
查看>>
青少儿书画 正式版发布
查看>>
大型网站技术架构(一)大型网站架构演化
查看>>
CEPH集群RBD快照创建、恢复、删除、克隆
查看>>
大型网站技术架构(六)网站的伸缩性架构
查看>>
MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
查看>>
Linux发生问题怎么处理啊?建议流程是这样...[鸟哥的Linux私房菜]
查看>>
Mysql学习总结(6)——MySql之ALTER命令用法详细解读
查看>>
大型网站技术架构(五)网站高可用架构
查看>>
SVN学习总结(2)——SVN冲突解决
查看>>