首页 > 兼容Silverlight4的实用的Silverlight可拖放工具类源代码

兼容Silverlight4的实用的Silverlight可拖放工具类源代码

开发日常的Silverlight应用程序时,常常要对一个域多个控件实现可拖放的MOUSE操作,在Silverlight中实现拖放的功能其实非常简单,但是为了提高程序功能代码的可复用性,程序员常常喜欢把常用的代码封装成一个工具类,例如Asp.net中常用SQLHelper类,用来操作数据库的,这里我们介绍的类是在Silverlight中实现拖动的工具类,它支持Silverlight2.0至Silverlight4.0的各个版本通用,好了话不多说,我们还是看代码吧:

public static class DragDrop
{private static bool IsDragging = false;private static Point curPoint;private const int MAX_ZINDEX = 99999;private const double CURRENT_OPACITY = 0.5;private static int lastZIndex;private static double lastOpacity;private static void sender_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){UIElement uiElement = sender as UIElement;if (uiElement != null){uiElement.CaptureMouse();lastZIndex = (int)uiElement.GetValue(Canvas.ZIndexProperty);uiElement.SetValue(Canvas.ZIndexProperty, MAX_ZINDEX);lastOpacity = uiElement.Opacity;uiElement.Opacity = CURRENT_OPACITY;IsDragging = true;curPoint = new Point(e.GetPosition(null).X, e.GetPosition(null).Y);}}private static void sender_MouseMove(object sender, MouseEventArgs e){if (!IsDragging){return;}UIElement uiElement = sender as UIElement;if (uiElement != null){double currentLeft = (double)uiElement.GetValue(Canvas.LeftProperty);double currentTop = (double)uiElement.GetValue(Canvas.TopProperty);double newLeft = (double)currentLeft + e.GetPosition(null).X - curPoint.X;double newTop = (double)currentTop + e.GetPosition(null).Y - curPoint.Y;uiElement.SetValue(Canvas.LeftProperty, newLeft);uiElement.SetValue(Canvas.TopProperty, newTop);curPoint = new Point(e.GetPosition(null).X, e.GetPosition(null).Y);}}private static void sender_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){UIElement uiElement = sender as UIElement;if (uiElement != null){uiElement.ReleaseMouseCapture();IsDragging = false;uiElement.SetValue(Canvas.ZIndexProperty, lastZIndex);uiElement.Opacity = lastOpacity;}}public static void Load(UIElement sender){sender.MouseLeftButtonDown += new MouseButtonEventHandler(sender_MouseLeftButtonDown);sender.MouseLeftButtonUp += new MouseButtonEventHandler(sender_MouseLeftButtonUp);sender.MouseMove += new MouseEventHandler(sender_MouseMove);}public static void UnLoad(UIElement sender){sender.MouseLeftButtonDown -= new MouseButtonEventHandler(sender_MouseLeftButtonDown);sender.MouseLeftButtonUp -= new MouseButtonEventHandler(sender_MouseLeftButtonUp);sender.MouseMove -= new MouseEventHandler(sender_MouseMove);}
}DragDrop工具类的使用方法:
DragDrop.Load(LayoutRoot);
DragDrop是一个静态类,使用起来非常简单,以上只要一行代码就可以实现对Grid控件的拖放操作了。
希望对大家有所帮助~!

转载于:https://www.cnblogs.com/slteam/archive/2010/03/18/1689384.html

更多相关:

  • Qt默认的QSlider和QSpinbox只能实现整数调整,不能实现浮点的变化,因此设计了如下可实现浮点变化的QFloatSlider和QFloatSpinner: QFloatSlider.h class QFloatSlider : public QSlider {Q_OBJECTpublic:QFloatSlider(QWi...

  • 一、概述 之前的文章介绍过卡尔曼滤波算法进行定位,我们知道kalman算法适合用于线性的高斯分布的状态环境中,我们也介绍了EKF,来解决在非高斯和非线性环境下的机器人定位算法。但是他们在现实应用中存在计算量,内存消耗上不是很高效。这就引出了MCL算法。 粒子滤波很粗浅的说就是一开始在地图空间很均匀的撒一把粒子,然后通过获取机器人的...

  • 1.精度问题 由于是double类型,r=mid 而不是r=mid-12.如果首位两端(f(0)和f(100))同号,证明解不在[1,100]区间内 这是我之所以TE的原因,没有预先判断3.若在这个区间内,则一定可要求出解 所以binarysearch 返回m#include #include ...

  • 代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 代理模式的英文叫做Proxy或Surrogate,中文都可译成"代理"。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 类图:...

  • 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=41&page=show_problem&problem=1121 题意:给出两点坐标,用一条最短的线(曲线或者直线)连接起来,坐标系中原点处有一个半径为R的圆,连线不能...

  • jdt可以做语法树分析,并且支持visitor模式对代码进行分析。跟pmd的分析方式一样,我们只要实现 visitor接口即可实现一个插件。 @Service("requestMappingInfoService")public class RequestMappingInfoServiceImpl implements Reques...

  • 1.静态方法 static:通常在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: (1)它们仅能调用其他的static方法。  (2)它们只能访问static数据。 (3)它们不能以任何方式引用this 或super。 class Simple {static v...

  • 类的静态构造函数也叫类型构造器,静态构造器,他调用的时刻由CLR来控制:CLR会选择如下时间之一来调用静态构造函数:      1,在类型的第一个实例创建之前,或类型的非继承字段或成员第一次访问之前。这里的“之前”,代表前后衔接的意思。这里的时刻是精确的!      2,在非继承的静态字段或成员第一次访问之前的某个时刻,具体时刻不定!...

  • 2019独角兽企业重金招聘Python工程师标准>>> django的settings中包含三个static相关设置项: STATIC_ROOT STATIC_URL STATICFILES_DIRS STATIC_URL 好理解,就是映射到静态文件的url,一般为/static/ STATICFILES...