概述

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):实现简单的拖放功能_转载相关推荐

  1. 一步一步学Silverlight 2系列(3):界面布局_转载

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

  2. 一步一步学Silverlight 2系列(3):界面布局

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

  3. 一步一步学Silverlight 2系列(10):使用用户控件

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

  4. 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法

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

  5. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

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

  6. 一步一步学Silverlight 2系列(9):使用控件模板

    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://terrylee.blog.51cto.com/342737/67243 ...

  7. 一步一步学Silverlight 2系列(13):数据与通信之WebRequest

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

  8. 一步一步学Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放_转载...

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

  9. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

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

最新文章

  1. 前端学习(3223):总结props
  2. 占用较多堆外内存的区域
  3. 计算机语法分析,电子科技大学-计算机学院-编译原理实验-语法分析.pdf
  4. Silverlight与Asp.net之间的调用及参数传递
  5. PicGo+码云Gitee建立国内高速图床
  6. python基于值的内存管理模式_为什么说python采用的是基于值的内存管理模式
  7. 你还在用虚拟机,win10自带的linux还有图形界面(小白教程)
  8. Eclipse 中 代码颜色的设置(注释的颜色, 局部变量的颜色, 类变量的颜色。。。 )
  9. Word2010为图片批量插入题注
  10. IconFont使用方式简介
  11. 一块硬盘装了黑苹果 一块硬盘装了win7_自己组装一台“iMac”是什么体验(下):AMD 平台也能吃上黑苹果...
  12. 欢迎使用CS方分分分n编辑器
  13. Crumb -面包屑状的嵌套按钮
  14. 优质的客户期货开户交易所返还高
  15. 无法登陆github官网的问题(能ping通但打不开网页)
  16. 【小沐学qt】生成二维码
  17. B. Partial Replacement
  18. 控制学习笔记(1)——反步控制法
  19. 我是怎么戒掉看玄幻小说的瘾
  20. 5MW风电永磁直驱发电机-1200V直流并网MATLAB仿真模型

热门文章

  1. 高温保护_耐高温保护膜可以用在哪一方面?
  2. mysql字符串等于失效_MySql整型索引和字符串索引失效或隐式转换问题
  3. pythoncsv数据类型_从CSV确定数据类型-Python
  4. android硬件加速器及其问题小结
  5. Flex:MyReport报表引擎2.7.3.0新功能——甘特图
  6. OPENGL 点击与选取的基础---坐标变换
  7. Oracle数据库完全卸载
  8. 伪元素在父元素中居中_web前端Html5开发CSS之元素五大居中方式,实用又简单!...
  9. Http请求中Content-Type
  10. 第十章:XAML标记扩展(三)