日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一步一步学Silverlight 2系列(4):鼠标事件处理

發(fā)布時間:2024/4/15 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步一步学Silverlight 2系列(4):鼠标事件处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

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

本文為系列文章第四篇,學(xué)習(xí)Silverlight 2中的鼠標(biāo)事件處理,支持的鼠標(biāo)事件包括MouseMove 、MouseEnter 、MouseLeave 、MouseLeftButtonDown、MouseLeftButtonUp。

聲明事件

對于鼠標(biāo)事件我們可以附加到任何Silverlight對象上面,如下面的XAML聲明,為兩個圓形添加上MouseEnter和MouseLeave事件:

<Canvas Background="#46461F"><Ellipse Width="120" Height="120" Fill="Orange"Canvas.Top="60" Canvas.Left="80"MouseEnter="OnMouseEnter"MouseLeave="OnMouseLeave"/><Ellipse Width="120" Height="120" Fill="Orange"Canvas.Top="60" Canvas.Left="280"MouseEnter="OnMouseEnter"MouseLeave="OnMouseLeave"/> </Canvas>

編寫事件處理程序,鼠標(biāo)放上去時和鼠標(biāo)移開時分別改變圓形的填充色:

void OnMouseEnter(object sender, MouseEventArgs e) {Ellipse ell = sender as Ellipse;ell.Fill = new SolidColorBrush(Colors.Yellow); } void OnMouseLeave(object sender, MouseEventArgs e) {Ellipse ell = sender as Ellipse;ell.Fill = new SolidColorBrush(Colors.Green); }

運行后效果如下:

分別在兩個圓形上放上鼠標(biāo)并移開后如下所示:

使用代碼管理事件

除了在XAML中聲明事件外,也可以直接使用代碼來注冊事件,簡單的修改一下上面的XAML文件,去掉事件的聲明并為兩個圓形分別加上Name:

<Canvas Background="#46461F"><Ellipse x:Name="ellipse1" Width="120" Height="120" Fill="Orange"Canvas.Top="60" Canvas.Left="80"/><Ellipse x:Name="ellipse2" Width="120" Height="120" Fill="Orange"Canvas.Top="60" Canvas.Left="280"/> </Canvas>

在代碼中進(jìn)行事件注冊:

public partial class Page : UserControl {public Page(){InitializeComponent();ellipse1.MouseEnter += new MouseEventHandler(OnMouseEnter);ellipse1.MouseLeave += new MouseEventHandler(OnMouseLeave);ellipse2.MouseEnter += new MouseEventHandler(OnMouseEnter);ellipse2.MouseLeave += new MouseEventHandler(OnMouseLeave);}void OnMouseEnter(object sender, MouseEventArgs e){Ellipse ell = sender as Ellipse;ell.Fill = new SolidColorBrush(Colors.Yellow);}void OnMouseLeave(object sender, MouseEventArgs e){Ellipse ell = sender as Ellipse;ell.Fill = new SolidColorBrush(Colors.Green);} }

運行后可以看到跟上面一樣的效果:

事件數(shù)據(jù)

所有的鼠標(biāo)事件都使用MouseButtonEventArgs和MouseEventArgs作為事件數(shù)據(jù),通過這兩個參數(shù)可以獲取相關(guān)事件數(shù)據(jù),使用GetPosition方法或者Source、Handled屬性。如下面的XAML聲明:

<Canvas Background="#46461F"><Rectangle Fill="Orange" Stroke="White" StrokeThickness="2"Canvas.Top="40" Canvas.Left="130"Width="240" Height="120"MouseMove="Rectangle_MouseMove"/><TextBlock x:Name="Status" Foreground="White" Text="Status" Canvas.Left="100" Canvas.Top="200"/> </Canvas>

為矩形添加MouseMove事件處理,在鼠標(biāo)移動時我們獲取當(dāng)前坐標(biāo)位置,并顯示出來:

private void Rectangle_MouseMove(object sender, MouseEventArgs e) {Point p = e.GetPosition(e.Source as FrameworkElement);Status.Text = String.Format("坐標(biāo)位置({0}:{1})",p.X,p.Y); }

運行后在矩形中移動鼠標(biāo),效果如下:

路由事件

在Silverlight中,提供了事件路由,使得我們可以在父節(jié)點上接收和處理來自于子節(jié)點的事件,Silverlight中的路由事件采用了冒泡路由策略。在鼠標(biāo)事件中MouseLeftButtonDown 、MouseLeftButtonUp 、MouseMove三個事件都支持路由事件,而MouseEnter、MouseLeave兩個事件不支持。下面的XAML中我們?yōu)镃anvas對象聲明了一個MouseLeftButtonDown事件:

<Canvas x:Name="ParentCanvas" Background="#46461F" MouseLeftButtonDown="ParentCanvas_MouseLeftButtonDown"><Rectangle x:Name="RecA" Fill="Orange" Stroke="White" StrokeThickness="2"Canvas.Top="40" Canvas.Left="60"Width="160" Height="100"/><Rectangle x:Name="RecB" Fill="LightBlue" Stroke="White" StrokeThickness="2"Canvas.Top="40" Canvas.Left="240"Width="160" Height="100"/><TextBlock x:Name="Status" Foreground="White" Text="Status" Canvas.Left="100" Canvas.Top="200"/> </Canvas>

添加MouseLeftButtonDown事件處理程序,顯示當(dāng)前鼠標(biāo)按下時的坐標(biāo),并顯示源控件名稱:

private void ParentCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {String msg = "x:y = " + e.GetPosition(sender as FrameworkElement).ToString();msg += " from " + (e.Source as FrameworkElement).Name;Status.Text = msg; }

運行后在RecA上按下鼠標(biāo):

在Canvas上按下鼠標(biāo):

結(jié)束語

本文簡單介紹了Silverlight 2中關(guān)于鼠標(biāo)事件處理的一些知識,包括事件注冊、獲取事件數(shù)據(jù)、路由事件等。在下一篇中,我們將使用這些鼠標(biāo)事件來實現(xiàn)一個簡單的拖放功能。

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

總結(jié)

以上是生活随笔為你收集整理的一步一步学Silverlight 2系列(4):鼠标事件处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。