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