Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic,Visual C#,IronRuby,Ironpython,对JSON、Web service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章带您快速进入silverlight 2开发。
本文为系列文章第五篇,利用前面讲过的鼠标事件处理实现简单的拖放功能。
在实现拖放功能中,分为三个步骤:
1.按下鼠标,触发MouSELEftButtonDown事件,选择要拖动的对象。
2.移动鼠标,触发MouseMove事件,移动选择的对象。
3.放开鼠标,触发MouSELEftButtonUp事件,停止捕捉事件。
<Canvas BACkground="#46461F"> <Button @H_210_44@mouSELEftButtonDown="OnMouseDown" @H_210_44@mouseMove="OnMouseMove" @H_210_44@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" @H_210_44@margin="10"></TextBlock> </StackPanel> </Button.Content> </Button> </Canvas>
开始拖放操作,实现MouSELEftButtonDown事件处理程序,用两个全局变量来记录当前鼠标的位置和鼠标是否保持移动。
bool trackingMouseMove = false; Point @H_457_41@mousePosition; void OnMouseDown(object sender,@H_595_160@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,@H_595_160@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,@H_595_160@mouseButtonEventArgs E) { FrameworkElement element = sender as FrameworkElement; trackingMouseMove = false; element.ReleaseMouseCapture(); mousePosition.X = mousePosition.Y = 0; element.cursor = null; }
最终,完成后的效果如下
拖动按钮
以上是大佬教程为你收集整理的一步一步学Silverlight 2系列(5):实现简单的拖放功能全部内容,希望文章能够帮你解决一步一步学Silverlight 2系列(5):实现简单的拖放功能所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。