轉帖|使用教程|編輯:龔雪|2024-05-11 10:06:54.473|閱讀 104 次
概述:本文將介紹在WPF應用中如何使用GongSolutions.WPF.DragDrop實現列表集合控件的拖動處理,希望對大家有所啟示幫助。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
WPF應用中,控件本身也可以通過實現事件代碼實現拖動的處理,不過如果我們使用GongSolutions.WPF.DragDrop來處理,事情會變得更加簡單輕松,它支持很多控件的拖動處理,如ListBox, ListView, TreeView, DataGrid等源自ItemsControl的控件,本文介紹在工作流模塊中拖動TreeView和DataGrid列表實現流程順序的調整處理。
PS:給大家推薦一個C#開發可以用到的界面組件——DevExpress WPF,它擁有120+個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。
DevExpress技術交流群10:532598169 歡迎一起進群討論
控件的GitHub地址:
使用GongSolutions.WPF.DragDrop比較簡單,和其他類似的做法差不多,首先在Nugget找到并添加對應的控件引用,如下所示。
添加完成相關的引用后,我們在需要使用的XAML頁面中添加對應的命名空間,如下代碼上所示。
xmlns:dd="urn:gong-wpf-dragdrop"
主要使用框架依賴屬性:
dd:DragDrop.IsDragSource="True"http://是否作為拖拽源 dd:DragDrop.IsDropTarget="False"http://是否作為投遞目標 dd:DragDrop.UseDefaultDragAdorner="True"http://使用默認的拖拽裝飾器 dd:DragDrop.UseDefaultEffectDataTemplate="True"http://使用默認的陰影數據模板 dd:DragDrop.EffectMoveAdornerTemplate//指定移動時的陰影裝飾器模板 dd:DragDrop.DropHandler="{Binding MyDropHandler}"http://投下時執行處理器
不過我們一般使用其中的三項就可以了,如下代碼所示,是基于MVVM的模型綁定:
dd:DragDrop.DropHandler="{Binding ViewModel}" dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True"
如下列表的界面,就是設置了拖動的事件處理效果:
拖動調整后,我們直觀的提示一下界面即可,如下所示。
前面我們看到代碼中有 dd:DragDrop.DropHandler="{Binding ViewModel}" ,這個視圖模型里面就是包含了拖動處理的事件的,我們看看它的定義。
首先視圖模型需要實現接口IDropTarget,以便處理拖動后的順序修改邏輯,它的接口定義如下所示。
我們的視圖模型實現實現IDropTarget接口,包含了兩個Over和Drop的方法的實現,如下代碼所示。
主要就是后臺對拖動的響應,以便更新后端的記錄順序,我們通過Seq的順序來調整即可。
上面介紹的是對于TreeViw控件的處理,對于DataGrid的處理方法,也是用類似的方式來實現即可。
其中它的XAML界面代碼如下所示。
<DataGrid x:Name="grid" dd:DragDrop.DropHandler="{Binding ViewModel}" dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True" dd:DragDrop.UseDefaultDragAdorner="True" hc:DataGridAttach.ShowRowNumber="True" AutoGenerateColumns="False" HeadersVisibility="All" IsReadOnly="True" ItemsSource="{Binding ViewModel.Items}" MouseDoubleClick="DataGrid_MouseDoubleClick" RowHeaderWidth="60" SelectionChanged="DataGrid_SelectionChanged" SelectionMode="Extended">
同樣我們可以看到的處理方式類似做法,后端頁面代碼也是實現拖動的順序處理即可,視圖模型實現實現IDropTarget接口,如下是視圖模型代碼實現。
#region 控件拖放處理 void IDropTarget.DragOver(IDropInfo dropInfo) { var sourceItem = dropInfo.Data as FormFlowInfo; var targetItem = dropInfo.TargetItem as FormFlowInfo; if (sourceItem != null && targetItem != null)// && targetItem.CanAcceptChildren) { dropInfo.DropTargetAdorner = DropTargetAdorners.Highlight; dropInfo.Effects = DragDropEffects.Copy; } } async void IDropTarget.Drop(IDropInfo dropInfo) { var sourceItem = (FormFlowInfo)dropInfo.Data; var targetItem = (FormFlowInfo)dropInfo.TargetItem; string dragMenuId = sourceItem.Id; string dropMenuId = targetItem.Id; try { if (!dragMenuId.IsNullOrEmpty() && !dropMenuId.IsNullOrEmpty()) { await BLLFactory<IFormFlowService>.Instance.UpdateTwoSeq(dragMenuId, dropMenuId); await GetData(); GrowlUtil.ShowInfo("已調整了步驟順序"); } } catch (Exception ex) { LogTextHelper.Error(ex); GrowlUtil.ShowError(ex.Message); } } #endregion
以上就是在WPF應用中使用GongSolutions.WPF.DragDrop實現列表集合控件的拖動處理,它在其他各類型列表集合控件中使用都是類似的方式,因此比較好用,而且實現的效果也比較不錯,強烈推薦。
本文轉載自:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: