一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

一步一步學Silverlight 2系列(5):實現(xiàn)簡單的拖放功能

 louisasea 2008-04-17

一步一步學Silverlight 2系列(5):實現(xiàn)簡單的拖放功能

概述

Silverlight 2 Beta 1版本發(fā)布了,無論從Runtime還是Tools都給我們帶來了很多的驚喜,如支持框架語言Visual Basic, Visual C#, IronRuby, Ironpython,對JSON、Web Service、WCF以及Sockets的支持等一系列新的特性?!兑徊揭徊綄WSilverlight 2系列》文章帶您快速進入Silverlight 2開發(fā)。

本文為系列文章第五篇,利用前面講過的鼠標事件處理實現(xiàn)簡單的拖放功能。

準備XAML

在實現(xiàn)拖放功能中,分為三個步驟:

1.按下鼠標,觸發(fā)MouseLeftButtonDown事件,選擇要拖動的對象。

2.移動鼠標,觸發(fā)MouseMove事件,移動選擇的對象。

3.放開鼠標,觸發(fā)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>

這里為了界面顯示效果,使用了控件模板,后續(xù)會專門講到。

開始拖放操作

開始拖放操作,實現(xiàn)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;
}
}

移動對象

移動對象,實現(xiàn)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);
}
}

完成拖放操作

完成拖放操作,實現(xiàn)MouseLeftButtonUp事件處理程序。

void OnMouseUp(object sender, MouseButtonEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
trackingMouseMove = false;
element.ReleaseMouseCapture();

mousePosition.X = mousePosition.Y = 0;
element.Cursor = null;
}

效果顯示

最終,完成后的效果如下

TerryLee_Silverlight2_0035

拖動按鈕

TerryLee_Silverlight2_0036

結束語

本文實現(xiàn)了一個簡單的拖放功能(示例來自于Silverlight 2 SDK),點擊下載文本示例代碼。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    福利视频一区二区在线| 欧美成人久久久免费播放| 久久福利视频视频一区二区| 亚洲熟女熟妇乱色一区| 国产精品人妻熟女毛片av久| 成年午夜在线免费视频| 国产在线一区二区免费| 日本精品中文字幕在线视频| 久久精品国产99国产免费| 欧美精品亚洲精品日韩专区| 亚洲一区精品二人人爽久久| 99久久免费看国产精品| 欧美乱码精品一区二区三| 国产成人精品一区二区在线看| 国产成人一区二区三区久久| 国产精品免费无遮挡不卡视频| 九九九热在线免费视频| 国产欧美日韩精品一区二区| 欧美亚洲91在线视频| 成人午夜激情在线免费观看| 亚洲精品中文字幕无限乱码| 一区二区日本一区二区欧美| 日韩一区二区三区嘿嘿| 久久国产精品亚州精品毛片 | 国产免费操美女逼视频| 久久亚洲午夜精品毛片| 亚洲丁香婷婷久久一区| 日韩中文字幕人妻精品| 久草热视频这里只有精品| 中国一区二区三区不卡| 欧美黑人巨大一区二区三区| 国产精品乱子伦一区二区三区| 亚洲精品福利视频你懂的| 日本人妻精品有码字幕| 日系韩系还是欧美久久| 欧美日韩国产成人高潮| 人体偷拍一区二区三区| 国产又大又硬又粗又黄| 正在播放玩弄漂亮少妇高潮| 国产肥妇一区二区熟女精品| 久久99一本色道亚洲精品|