首页 > 其他分享 >在WPF应用中使用GongSolutions.WPF.DragDrop实现列表集合控件的拖动处理

在WPF应用中使用GongSolutions.WPF.DragDrop实现列表集合控件的拖动处理

时间:2023-12-05 10:56:08浏览次数:47  
标签:GongSolutions 控件 拖动 dd DragDrop WPF True

WPF应用中,控件本身也可以通过实现事件代码实现拖动的处理,不过如果我们使用GongSolutions.WPF.DragDrop来处理,事情会变得更加简单轻松,它支持很多控件的拖动处理,如ListBox, ListView, TreeView, DataGrid等源自ItemsControl的控件,本篇随笔介绍在工作流模块中拖动TreeView和DataGrid列表实现流程顺序的调整处理。

1、使用GongSolutions.WPF.DragDrop

控件的GitHub地址:https://github.com/punker76/gong-wpf-dragdrop

使用GongSolutions.WPF.DragDrop比较简单,和其他类似的做法差不多,首先在Nugget找到并添加对应的控件引用,如下所示。

 添加完成相关的引用后,我们在需要使用的XAML页面中添加对应的命名空间,如下代码上所示。

xmlns:dd="urn:gong-wpf-dragdrop"

主要使用框架依赖属性:

dd:DragDrop.IsDragSource="True"//是否作为拖拽源
dd:DragDrop.IsDropTarget="False"//是否作为投递目标
dd:DragDrop.UseDefaultDragAdorner="True"//使用默认的拖拽装饰器
dd:DragDrop.UseDefaultEffectDataTemplate="True"//使用默认的阴影数据模板
dd:DragDrop.EffectMoveAdornerTemplate//指定移动时的阴影装饰器模板
dd:DragDrop.DropHandler="{Binding MyDropHandler}"//投下时执行处理器

不过我们一般使用其中的三项就可以了,如下代码所示,是基于MVVM的模型绑定

 dd:DragDrop.DropHandler="{Binding ViewModel}"
 dd:DragDrop.IsDragSource="True"
 dd:DragDrop.IsDropTarget="True"

如下列表的界面,就是设置了拖动的事件处理效果

拖动调整后,我们直观的提示一下界面即可,如下所示。

 前面我们看到代码中有  dd:DragDrop.DropHandler="{Binding ViewModel}" ,这个视图模型里面就是包含了拖动处理的事件的,我们看看它的定义。

首先视图模型需要实现接口IDropTarget,以便处理拖动后的顺序修改逻辑,它的接口定义如下所示。

我们的视图模型实现实现IDropTarget接口,包含了两个Over和Drop的方法的实现,如下代码所示。

 主要就是后台对拖动的响应,以便更新后端的记录顺序,我们通过Seq的顺序来调整即可。

 

2、在DataGrid中实现拖动列表

上面介绍的是对于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实现列表集合控件的拖动处理,它在其他各类型列表集合控件中使用都是类似的方式,因此比较好用,而且实现的效果也比较不错,强烈推荐。

 

标签:GongSolutions,控件,拖动,dd,DragDrop,WPF,True
From: https://www.cnblogs.com/wuhuacong/p/17876729.html

相关文章

  • 界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(上)
    DevExpressWPF的SideNavigation(侧边导航)、TreeView、导航面板组件能帮助开发者在WPF项目中添加Windows样式的资源管理器栏或OutlookNavBar(导航栏),DevExpressWPFNavBar和Accordion控件包含了许多开发人员友好的功能,专门设计用于帮助用户构建极佳的应用功能。P.S:DevExpressWPF......
  • WPF 选项卡 控件 美化
    WPF选项卡控件美化效果: 样式<LinearGradientBrushx:Key="TabItem.Selected.BordernCjh"StartPoint="0,0"EndPoint="0,1"><GradientStopColor="#FFE8A6"Offset="0.07"/><GradientStopColor=&......
  • wpf学习 Prism 使用入门
    一、手动添加安装包Prism.DryIocapp.xaml.cs修改继承基类为:PrismApplication实现其中的抽象成员:CreateShell用于指定启动的窗口类1publicpartialclassApp:PrismApplication2{3protectedoverrideWindowCreateShell()4{5......
  • WPF应用开发之控件动态内容展示
    在我们开发一些复杂信息的时候,由于需要动态展示一些相关信息,因此我们需要考虑一些控件内容的动态展示,可以通过动态构建控件的方式进行显示,如动态选项卡展示不同的信息,或者动态展示一个自定义控件的内容等等,目的就是能够减少一些硬编码的处理方式,以及能够灵活的展示数据。本篇随笔通......
  • WPF应用开发之附件管理
    在我们之前的开发框架中,往往都是为了方便,对附件的管理都会进行一些简单的封装,目的是为了方便快速的使用,并达到统一界面的效果,本篇随笔介绍我们基于SqlSugar开发框架的WPF应用端,对于附件展示和控件的一些封装处理界面效果,供大家参考斧正。1、回顾附件管理,Winform端以及VueElement的......
  • Wpf Prism 导航(参数传递,路由守卫,路由记录)
    十年河东,十年河西,莫欺少年穷学无止境,精益求精1、新建项目wpfApp5,添加Nuget引用,并初始化App.xaml及cs类 app.xaml如下:<Prism:PrismApplicationx:Class="WpfApp5.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="......
  • Wpf 第三方Mvvm包(mvvmLight/Microsoft.Toolkit.Mvvm/CommunityToolkit.Mvvm)
    十年河东,十年河西,莫欺少年穷学无止境,精益求精 mvvmLight和 Microsoft.Toolkit.Mvvm已被Nuget弃用且不再更新,在此不作说明CommunityToolkit.Mvvm是NetCore版本引用包,详情参考:WPFMVVM框架:CommunityToolkit.Mvvm包使用介绍1、wpf项目中使用 CommunityToolkit.Mvvm(NetCore3.1......
  • WPF 控件驱动控件 及 数据驱动控件(双向绑定)
    wpf双向绑定十年河东,十年河西,莫欺少年穷学无止境,精益求精最近在知乎,看了很多提问,涉及到就业,裁员,经济等,不看不知道,越看越头疼,知乎上很多人提问毕业生就业如何难,2023年裁员如何严重,35岁的中年危机,程序员被裁员后找不到工作该,经济如何差等话题哎,这让我这个35......
  • 极语言3-15 Win32编程常用函数-公用图形库,图面说明类、颜色控件类、伽玛渐变类——成
    Win32编程常用函数-公用图形库中文名称英文名称示例作用图驱创建DirectDrawCreate图驱创建(标识,@接口,0)创建DirectDraw对象的实例。标识用设备GUID为硬件加速,用0为仿真;1模拟硬件支持;2纯仿真无硬件;成功返回0;图驱个例DirectDrawCreateClipper图驱个例(0,@接口,0)创建不与Direc......
  • 搭建Wpf框架(18) ——DataGrid实现右冻结
    19.搭建Wpf框架(18)——DataGrid实现右冻结先上效果图: 其中,Field3和Field4为右冻结列。将一下大致思路,1.在DataGrid右边再放一个DataGrid,用来显示右冻结的列,把冻结的列从左边的DataGrid移除。2.然后左边的DataGrid右侧的滚动条隐藏,横向滚动条显示,右边的DataDataGrid右侧......