Silverlight鼠標(biāo)滾動(dòng)事件全方位解讀
Silverlight的出現(xiàn),給我們帶來了一個(gè)全新的程序編寫環(huán)境。其在音頻視頻方面的處理是相當(dāng)強(qiáng)大的。展示一個(gè)Silverlight鼠標(biāo)滾動(dòng)事件的示例只需要幾行代碼即可,我認(rèn)為大部分人都可以在幾分鐘內(nèi)做好,并理解它是如何工作的。因此我決定將這個(gè)事件和Expression Blend中引入的新行為一起合并成一個(gè)例子進(jìn)行介紹,本文主要介紹如何創(chuàng)建行為,如何使用鼠標(biāo)滾動(dòng)事件,以及如何將其添加到可滾動(dòng)的控件上,以便使用鼠標(biāo)滾輪。#t#
Silverlight鼠標(biāo)滾動(dòng)事件的行為是什么?
你可能曾經(jīng)在ASP.NET Ajax框架中使用過行為,說得簡(jiǎn)單點(diǎn)這里的行為就是ASP.NET Ajax語(yǔ)法的Silverlight實(shí)現(xiàn),允許創(chuàng)建可復(fù)用的和可連接到HTML控件的行為。(讓Silverlight 3操作簡(jiǎn)單的和手工具)
從Blend 3 Beta版開始引入行為的概念,可以在設(shè)計(jì)窗口中拖動(dòng)內(nèi)置的行為,增加圖形元素的活力,進(jìn)入Asset文件夾,在這里可以找到控件、效果、資源和其它東西,現(xiàn)在又多了一個(gè)行為卡片。
Expression Blend 3.0 引入了許多行為類型,行為< T>是其中最簡(jiǎn)單的了,適用于DependencyObject,行為可以修改控件的外觀,添加元素,修改屬性或處理一個(gè)或多個(gè)事件。MouseDragElementBehavior就是一個(gè)活生生的例子,它連接鼠標(biāo)事件,讓元素可以在頁(yè)面中拖動(dòng)。
編寫一個(gè)Silverlight鼠標(biāo)滾動(dòng)事件的行為
編寫一個(gè)行為是一件很簡(jiǎn)單的事情,行為是行為< T>的類擴(kuò)展,因此首先要做的是引用C:\Program Files\Microsoft SDKs\Expression\Blend 3\Interactivity\Libraries\Silverlight目錄下的Microsoft.Expression.Interactions.dll和System.Windows.Interactivity.dll。如果你從Blend 3.0添加一個(gè)現(xiàn)有的行為,那這些動(dòng)態(tài)庫(kù)會(huì)自動(dòng)引用到項(xiàng)目中。
引用添加好后,就可以創(chuàng)建類了:
- public class MouseWheel
ScrollBehavior : Behavior- < Control>
- {
- // 在這里添加實(shí)現(xiàn)代碼
- }
由于我們是要擴(kuò)展Silverlight中可滾動(dòng)的組件,我們需要?jiǎng)?chuàng)建一個(gè)可以連接到Control類的類型,在Silverlight中沒有通用的用于可滾動(dòng)組件(如ScrollViewer、DataGrid和DataGrid)的類,這就需要自己想辦法處理才行,我們將在后面進(jìn)行介紹,目前先分析一下如何創(chuàng)建一個(gè)行為。(微軟Silverlight中加入Smooth Streaming)
接下來要做的是在目標(biāo)對(duì)象上連接MouseWheel事件,當(dāng)我們完成行為類的擴(kuò)展后,我們有兩個(gè)辦法來處理連接和釋放目標(biāo)上的行為:將行為連接到對(duì)象上時(shí)調(diào)用OnAttached,釋放對(duì)象上的行為時(shí)使用OnDetaching。OnAttached和OnDetaching是連接和釋放公共事件的理想選擇,目標(biāo)對(duì)象是通過行為< T>在AssociatedObject屬性上暴露的,下面是我的代碼示例:
- /// < summary>
- /// Called after the behavior is
attached to an AssociatedObject.- /// < /summary>
- /// < remarks>Override this to
hook up functionality to the
AssociatedObject.< /remarks>- protected override void OnAttached()
- {
- this.AssociatedObject.MouseWheel
+= new MouseWheelEventHandler
(AssociatedObject_MouseWheel);- base.OnAttached();
- }
- /// < summary>
- /// Called when the behavior is
being detached from its Associated
Object, but before it has actually
occurred.- /// < /summary>
- /// < remarks>Override this to unhook
functionality from the AssociatedObject.- < /remarks>
- protected override void OnDetaching()
- {
- this.AssociatedObject.MouseWheel -=
new MouseWheelEventHandler
(AssociatedObject_MouseWheel);- base.OnDetaching();
- }
Silverlight鼠標(biāo)滾動(dòng)事件的行為創(chuàng)建就為大家介紹到這里。





















