开发日常的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

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

  1. 实用ListView加载提示工具类

    优秀的用户体验中,ListView应该包括这几个状态: 正在加载数据 加载完成但无数据 加载失败 平常使用诸多不便大家应该都有体会,为了开发方便,所以我写了这样一个工具类,不需要修改xml文件,仅需类 ...

  2. 基于jdk8 LocalDate系列API的全新实用时间工具类

    基于jdk8 LocalDate系列API的实用时间工具类, 已经经过多个项目的考验与完善, 包含个人心得体会 欢迎转载,转载请注明网址:https://blog.csdn.net/qq_419102 ...

  3. 这7个实用工具类网站,你用过几个?

    作为一个工具狂,搜罗了超多好用的工具网站,今天给大家分享7个实用的工具类网站,可以解决大家很多问题,堪称效率提升利器. 1.UU在线工具 工欲善其事必先利其器,UU在线工具是一个工具聚合网站,里面聚合 ...

  4. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  5. Boost 库中的实用工具类使用入门

    简介: 实用工具类开发和维护会耗费程序员的时间.Boost 通过提供几个高质量的库,从而简化了此过程,您可以将这些库轻松集成到现有的代码库中.本文简单概述一些较流行的 Boost 实用工具类,并帮助您 ...

  6. Java解析Excel工具类(兼容xls和xlsx)

    依赖jar <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml< ...

  7. php简单实用的操作文件工具类(创建、移动、复制、删除)

    php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) {  // 原目录,复制到的目录 $dir = opend ...

  8. java 兼容excel_Java解析Excel工具类(兼容xls和xlsx)

    依赖jar org.apache.poi poi-ooxml 4.0.1 ExcelUtils.java package javax.utils; import java.io.File; impor ...

  9. 关于java开发中的实用工具Hutool工具类

    Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的". Hutoo ...

最新文章

  1. 看!清华网红自行车成精了:拥有“类人脑芯片”,可无人驾驶!
  2. Android recipe 在代码中写布局
  3. C语言 链表的创建--打印--逆置--新增--删除--排序--释放
  4. Mac下安装Mysql以及修改Mysql密码
  5. 根据名字预测性别——朴树贝叶斯分类器
  6. Codeforces Round #327 (Div. 2) B Rebranding
  7. 关于公司没有公网IP也没有动态IP,如何远程办公呢?
  8. 【web前端优化之图片模糊到清晰】看我QQ空间如何显示相片
  9. docker 容器命令
  10. 技术中台构建思路及进展_半年中台实践思考:落地中台,贵在其神,活用其形...
  11. [Ubuntu] 文件权限
  12. 【人工智能】“深度学习”这十年:52篇顶级论文带你走完人工智能之路
  13. MySQL复制之gtid_purged与gtid_executed
  14. 线性插值法(一次插值多项式)的Python程序
  15. Translation QA 检查
  16. 【老文档】手机夜间场景省电技术
  17. 推荐算法中CTR和CVR的ESMM模型pytorch实现
  18. 数据结构与算法(一) 链表(代码示例)
  19. 初步认识计算机网络的结构特点
  20. 做游戏,学编程(C语言) 14 口袋妖怪

热门文章

  1. c# tcp显示服务器图片,C# TCP通迅原码(服务器与客户端相互发送文本与图片)
  2. mysql 5.7 xbackup_CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup
  3. cap mysql_.NetCore关于Cap(RabbitMQ)结合MySql使用出现MySql相关类冲突问题解决办法
  4. 使用Python,OpenCV实现简单的场景边界/拍摄转换检测器
  5. LabVIEW跳转访问网页
  6. OpenCV(基础补充)图像二值化
  7. 三、python中最基础的文件处理汇总
  8. android组件什么时候加载到r文件,Android自定义加载loading view动画组件
  9. mysql数据定义语句有哪些_MySQL语法一:数据定义语句 钓鱼翁
  10. python opencv单通道转多通道_13、OpenCV绘图和文本显示