首页 > 代码库 > 拖拽控件
拖拽控件
拖拽控件
1.背景
Diagram Designed这类项目,往往需要用到拖拽功能,以便将各类元素拖放到画布中。本文将总结一种在用WPF实现拖拽功能的方法。
2.拖拽逻辑
拖动对象简单的说来包含两个过程:<1>拖、<2>放。当然,如果需要细分的话,可以包括:<1>选中、<2>拖、<3>放,但前两个动作是一气呵成的,所以简单起见,两个过程就够了。
拖动过程的主要参与者包括被拖动目标与被放置目标
对于拖动作,在WPF中对应被拖动目标的MouseMove事件(同时需要判断MouseButtonState.Pressed)。
对于放动作,在WPF中对应被放置目标的Drop事件。
3.拖拽过程的对象传递
3.1 DragDrop管理类
在拖拽过程中有一个重要的中间过程类(个人觉得它的作用有点类似于ASP.Net中的Session)DragDrop管理类。
3.1.1对象存入
调用DragDrop管理类的DoDragDrop (),就可以实现将被拖拽对象,存入DragDrop管理类。用法如下:
var dragData = http://www.mamicode.com/new DataObject("myShape", type);
DragDrop.DoDragDrop(sender as Shape, dragData, DragDropEffects.Move);
3.1.1对象取出
取出对象则直接使用Drop对象的参数DragEventArgs e,用法如下:
var type = (ShapeType)e.Data.GetData("myShape");
有了DragDrop管理类,整个拖拽过程的传递就简单了。为了看起来像是把元素拖到画板上,首先在MouseMove中将被拖动对象的特征信息(或者是其本身)存入到DragDrop管理类中。当Drop事件触发时,从DragDrop管理类中再获取存入的信息,并还原被拖动对象(或其代表的对象)。接下来可以选择生成新的被拖动对象或其他的逻辑。
拖拽控件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。