概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章带您快速进入Silverlight 2开发。
本文为系列文章第五篇,利用前面讲过的鼠标事件处理实现简单的拖放功能。

准备XAML

在实现拖放功能中,分为三个步骤:
1.按下鼠标,触发MouseLeftButtonDown事件,选择要拖动的对象。
2.移动鼠标,触发MouseMove事件,移动选择的对象。
3.放开鼠标,触发MouseLeftButtonUp事件,停止捕捉事件。
做一个简单的界面,用一个按钮来显示拖放,如下XAML声明:
<Canvas Background="#46461F"><Button MouseLeftButtonDown="OnMouseDown" MouseMove="OnMouseMove"MouseLeftButtonUp="OnMouseUp" Canvas.Left="50" Canvas.Top="50" Background="Red"FontSize="18"Width="160" Height="80"><Button.Content><StackPanel Orientation="Horizontal" HorizontalAlignment="Center"VerticalAlignment="Center"><Image Source="smile_6.png"></Image><TextBlock Text="拖动我" VerticalAlignment="Center" Margin="10"></TextBlock></StackPanel></Button.Content></Button>
</Canvas>
这里为了界面显示效果,使用了控件模板,后续会专门讲到。

开始拖放操作

开始拖放操作,实现MouseLeftButtonDown事件处理程序,用两个全局变量来记录当前鼠标的位置和鼠标是否保持移动。
bool trackingMouseMove = false;
Point mousePosition;
void OnMouseDown(object sender, MouseButtonEventArgs e)
{FrameworkElement element = sender as FrameworkElement;mousePosition = e.GetPosition(null);trackingMouseMove = true;if (null != element){element.CaptureMouse();element.Cursor = Cursors.Hand;}
}

移动对象

移动对象,实现MouseMove事件处理程序,计算元素的位置并更新,同时更新鼠标的位置。
void OnMouseMove(object sender, MouseEventArgs e)
{FrameworkElement element = sender as FrameworkElement;if (trackingMouseMove){double deltaV = e.GetPosition(null).Y - mousePosition.Y;double deltaH = e.GetPosition(null).X - mousePosition.X;double newTop = deltaV + (double)element.GetValue(Canvas.TopProperty);double newLeft = deltaH + (double)element.GetValue(Canvas.LeftProperty);element.SetValue(Canvas.TopProperty, newTop);element.SetValue(Canvas.LeftProperty, newLeft);mousePosition = e.GetPosition(null);}
}

完成拖放操作

完成拖放操作,实现MouseLeftButtonUp事件处理程序。
void OnMouseUp(object sender, MouseButtonEventArgs e)
{FrameworkElement element = sender as FrameworkElement;trackingMouseMove = false;element.ReleaseMouseCapture();mousePosition.X = mousePosition.Y = 0;element.Cursor = null;
}

效果显示

最终,完成后的效果如下
 
拖动按钮
 

结束语

本文实现了一个简单的拖放功能(示例来自于Silverlight 2 SDK),点击下载文本示例代码。

本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/67221

本文出自 51CTO.COM技术博客

转载于:https://www.cnblogs.com/GT_Andy/archive/2009/07/28/1922031.html

(5):Silverlight 2 实现简单的拖放功能相关推荐

  1. 一步一步学Silverlight 2系列(5):实现简单的拖放功能

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  2. 一步一步学Silverlight 2系列(5):实现简单的拖放功能_转载

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  3. winform listview 设置选中项 图片_实战PyQt5: 069-MV框架中的项视图拖放功能

    模型-视图框架完全支持Qt的基本拖放操作,列表.树形和表格部件中的项可以在视图间拖动,数据可以以MIME类型的格式进行导入和导出 Qt提供的标准视图自动支持在视图内部的拖放,其中的项可以被移动以改变显 ...

  4. react引入外部js_React.js:无需使用外部库即可实现拖放功能

    react引入外部js by Rajesh Pillai 由Rajesh Pillai React.js:无需使用外部库即可实现拖放功能 (React.js: implement the drag a ...

  5. android Launcher——拖放功能深入研究

    Luancher有一个相对比较复杂的功能就是拖放功能,要深入了解launcher,深入理解拖放功能是有必要的,这篇blog,我将对launcher的拖放功能做深入的了解 1.首先直观感受什么时候开始拖 ...

  6. 实现一个简单的投票功能

    实现一个简单的投票功能 最近项目中需要用到一个投票功能,当时觉得简单,向都没想就动手开始做,没想到走了不少弯路. 后来才发现,是想的太过简单了.来看看改进后的功能. 第一步:数据库设计 两个表:一个主 ...

  7. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  8. nodejs php web,nodejs实现的简单web服务器功能示例

    本文实例讲述了nodejs实现的简单web服务器功能.分享给大家供大家参考,具体如下: 前端js代码: $.ajax({ url:'http://192.168.0.114:3000',//服务器地址 ...

  9. WPF拖放功能实现zz

    写在前面:本文为即兴而作,因此难免有疏漏和词不达意的地方.在这里,非常期望您提供评论,分享您的想法和建议. 这是一篇介绍如何在WPF中实现拖放功能的短文. 首先要读者清楚的一件事情是:拖放主要分为拖放 ...

最新文章

  1. Reg Infomation
  2. Windows 7 X64平台编译LLVM+clang
  3. H.264码流结构解析
  4. java开灯问题_C++之开灯问题(链表)
  5. Linux 通过命令行下载、上传文件到百度网盘(bypy)
  6. Kudu :主键冲突 status=Already present: key already present
  7. Asp.Net在SqlServer中的图片存取
  8. 标准化工作导则2020_夯实标准化工作——标准化工作导则GB/T 1.12020培训会在水发兴业能源顺利举办...
  9. Linux下的HDFS命令
  10. Android Room 库基础入门
  11. java枚举值转化中文_多个枚举的国际化(枚举值的转换)
  12. JavaScript:集合与数组,重要但你不知道的ES6数据类型
  13. 程序员找工作黑名单,避雷针!
  14. 十分钟实现灭霸打响指灰飞烟灭的效果,android路由器app
  15. xgboost在LTR(学习排序)中的应用
  16. ubuntu系统忘记密码(win+ubuntu双系统)
  17. thinkphp实现邮箱发送
  18. Revit二次开发—获取内置参数对应的中文字符串,并导出Excel;举例(BuiltParameterGroup、ParameterType和BuiltInCategory)
  19. JS抽象语法树AST基础学习
  20. Linear equations

热门文章

  1. echarts热力地图
  2. 解决celipse中mybatis使用的时候xml没有提示的问题
  3. 动态库注入--APC注入
  4. PHP socket
  5. android中实现“再按一次退出”功能
  6. CSS中加号、星号及其他符号的作用
  7. asp.net mvc kendo Grid Filter
  8. HTML5——Web Workers
  9. Asp深度揭密(下)
  10. Tips--更改Jupyter Notebook的默认工作路径