一步一步学Silverlight 2系列(5):实现简单的拖放功能_转载
概述
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.cnblogs.com
原文链接:http://www.cnblogs.com/Terrylee/archive/2008/03/08/Silverlight2-step-by-step-part4-Implementing-Drag-and-Drop-Functionality.html
转载于:https://www.cnblogs.com/ZhangHuaning/archive/2010/04/20/1715972.html
一步一步学Silverlight 2系列(5):实现简单的拖放功能_转载相关推荐
- 一步一步学Silverlight 2系列(3):界面布局_转载
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(3):界面布局
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(10):使用用户控件
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(9):使用控件模板
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://terrylee.blog.51cto.com/342737/67243 ...
- 一步一步学Silverlight 2系列(13):数据与通信之WebRequest
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放_转载...
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
最新文章
- 前端学习(3223):总结props
- 占用较多堆外内存的区域
- 计算机语法分析,电子科技大学-计算机学院-编译原理实验-语法分析.pdf
- Silverlight与Asp.net之间的调用及参数传递
- PicGo+码云Gitee建立国内高速图床
- python基于值的内存管理模式_为什么说python采用的是基于值的内存管理模式
- 你还在用虚拟机,win10自带的linux还有图形界面(小白教程)
- Eclipse 中 代码颜色的设置(注释的颜色, 局部变量的颜色, 类变量的颜色。。。 )
- Word2010为图片批量插入题注
- IconFont使用方式简介
- 一块硬盘装了黑苹果 一块硬盘装了win7_自己组装一台“iMac”是什么体验(下):AMD 平台也能吃上黑苹果...
- 欢迎使用CS方分分分n编辑器
- Crumb -面包屑状的嵌套按钮
- 优质的客户期货开户交易所返还高
- 无法登陆github官网的问题(能ping通但打不开网页)
- 【小沐学qt】生成二维码
- B. Partial Replacement
- 控制学习笔记(1)——反步控制法
- 我是怎么戒掉看玄幻小说的瘾
- 5MW风电永磁直驱发电机-1200V直流并网MATLAB仿真模型
热门文章
- 高温保护_耐高温保护膜可以用在哪一方面?
- mysql字符串等于失效_MySql整型索引和字符串索引失效或隐式转换问题
- pythoncsv数据类型_从CSV确定数据类型-Python
- android硬件加速器及其问题小结
- Flex:MyReport报表引擎2.7.3.0新功能——甘特图
- OPENGL 点击与选取的基础---坐标变换
- Oracle数据库完全卸载
- 伪元素在父元素中居中_web前端Html5开发CSS之元素五大居中方式,实用又简单!...
- Http请求中Content-Type
- 第十章:XAML标记扩展(三)