Silverlight拖放功能相關應用技巧分享
Silverlight工具是一個非常有用的開發工具。可以幫助開發人員輕松實現基于多媒體播放操作等功能。在實際使用中,我們會體會到其強大的功能特定。在這里就先來了解其中Silverlight拖放功能的作用。#t#
在Silverlight拖放功能的實現中,分為三個步驟:
1.按下鼠標,觸發MouseLeftButtonDown事件,選擇要拖動的對象。
2.移動鼠標,觸發MouseMove事件,移動選擇的對象。
3.放開鼠標,觸發MouseLeftButtonUp事件,停止捕捉事件。
做一個簡單的界面,用一個按鈕來顯示Silverlight拖放功能,如下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>
這里為了界面顯示效果,使用了控件模板,后續會專門講到。
Silverlight拖放功能之開始拖放操作
開始拖放操作,實現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;
- }
- }
Silverlight拖放功能之移動對象
移動對象,實現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);
- }
- }
Silverlight拖放功能之完成拖放操作
完成拖放操作,實現MouseLeftButtonUp事件處理程序。
- void OnMouseUp(object sender,
MouseButtonEventArgs e)- {
- FrameworkElement element =
sender as FrameworkElement;- trackingMouseMove = false;
- element.ReleaseMouseCapture();
- mousePositionmousePosition.X =
mousePosition.Y = 0;- element.Cursor = null;
- }