标签:des io ar 使用 strong sp on ef bs
拖拽控件
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 = 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管理类中再获取存入的信息,并还原被拖动对象(或其代表的对象)。接下来可以选择生成新的被拖动对象或其他的逻辑。
标签:des io ar 使用 strong sp on ef bs
原文地址:http://www.cnblogs.com/ACE8793/p/4037938.html