自定義Trigger並關聯到Action

    

  
  以前寫過一篇文章, 關於自定義Behaviors ,經過它,咱們在Blend中能夠快速的實現各類行爲並方便使用。固然,結合blend的開發中,咱們還知道xaml中還有另外幾個重要的屬性,其實在上篇文章中,咱們也看到過它們,那就是Triggers和Actions,它們也位於 System.Windows.Interactivity Microsoft.Expression.Interactions  命名空間下面。接下來,咱們來看看如何在blend中使用它們並自定義Trigger且關聯到相應的Action上。

     1、關於Triggers和Actions

     做爲開發人員,對於這些屬性可能用的很少,也不習慣使用,我也是同樣,在開發中不多使用它們,這緣由也有不少,其中最重要的一點是長期以來,你們都習慣了直接在visual studio這個強大的IDE下進行編碼,像Triggers和Actions能實現的東西徹底能夠用事件,方法等取代之。在這裏,我只是給你們擴展下思路:Triggers和Actions還能夠這樣使用。再說,既然微軟給咱們提供了Blend這個工具,咱們也得適應結合它與vs協同開發的新思惟,其中一個很大的優點就是大大提升開發的效率。可是,任何東西都有兩面性的,我這裏也不是讓你必定要這樣,這徹底取決於你在實際工做中的須要。好了,接下來,咱們來看看,Triggers和Actions的基本概念:

  •     Triggers(觸發器)正如其名字,經過它,在特定的時候,能夠引起一系列的動做。在blend下,存在着EventTrigger, TimerTrigger, StoryBoardCompletedTrigger, KeyTrigger等等。

  •    Actions(動做):它和以前的Behavior有點相似,在blend中你也能夠看到,其實它們一併被歸爲行爲。至於概念,也沒什麼好解釋的,它的名字已經很是形象了。默認主要存在了ChangePropertyAction, ControlStoryBoardAction, PlaySoundAction等動做。



     通常來講,Triggers和Actions是一塊兒使用的,舉個例子,咱們在一個EventTrigger中使用PropertyChangeAction(這個動做用來改變元素的屬性),當一個特定的事件被觸發的時候,將會執行這個動做,來改變元素的屬性。固然,在Triggers中,你能夠定義多個Actions以響應不一樣的動做。


一些注意事項 :不是任什麼時候候都適合使用Actions和Triggers的,在官方文檔中有這麼一段話:

Silverlight 支持對元素使用 EventTriggerobject.Triggers 屬性元素,但建議不要對目前的應用程序使用此方法。EventTrigger 可能只對 Loaded 事件支持一個觸發操做(您能夠在 EventTrigger.RoutedEvent 屬性中爲此觸發事件命名)。這使得 EventTrigger 技術不適合大多數運行時交互。此時不使用 EventTriggerTriggers 屬性,而是考慮如下兩種備選方法之一:html

  • 要對不屬於控件的對象的屬性進行動畫處理,請將演示圖板放在頁面或應用程序的常規 Resources 中。而後在放置"Triggers"的元素上分配一個事件處理程序。響應相關事件時,該事件處理程序應從資源字典中檢索演示圖板。而後,您對檢索到的 Storyboard 調用 Begin。此技術的另外一個好處是相同的演示圖板能夠應用於多個用戶的交互。vim

  • 要對屬於控件的對象的屬性進行動畫處理(派生自 Control),請使用 VisualStateManager 技術,並經過調用 GoToState 基於控件的狀態或輸入信息運行適當的動畫。


    工具

2、一個使用trigger和Action的例子

打開blend,新建一個Silverlight項目




咱們在畫板上拖拽一個矩形



接下來,咱們打開Assets(資產)項下的行爲面板,從裏面拖拽一個ChangePropertyAction到矩形上面



咱們看下這樣產生了什麼代碼:



咱們選擇ChangePropertyAction,查看它的屬性


接着,咱們繼續修改這裏面的屬性,實現當事件觸發的時候,矩形的長度增加到200,並在4秒的時間內帶有Easy out的緩衝動畫效果:



接着,運行項目,你就能夠看到結果了,確實很簡單。接下來,咱們就來實現一個自定義的Trigger來關聯到一個Action上面。


3、自定義Trigger

這裏,咱們要實現一個MyKeyDown的Trigger,咱們右擊項目名稱,添加新項:



肯定後,自動會打開新建立的類文件,咱們發現,它繼承了位於System.Windows.Interactivity空間下的TriggerBase<T>類,和自定義Behavior相似,它也有兩個重載的方法
OnAttachedOnDetaching在前者中,咱們主要是插入要在將 Trigger 附加到對象時運行的代碼。在後者,主要是插入要在從對象中刪除 Trigger 時運行的代碼。接下來,咱們分別在它們裏面增長以下所示的代碼:



在上面的代碼中,其中最重要的是,
爲了將 Trigger觸發,您必須調用 InvokeActions方法。調用 InvokeActions以後,將會通知與此 Trigger關聯的任何 Actions運行。接下來生成下項目。咱們在以前的項目上繼續修改,再打開[ChangePropertyAction]的屬性面板,咱們將自定義的Trigger關聯進去:



肯定後,咱們能在屬性面板那邊找到一個keys屬性,咱們在裏面寫入AB
這樣,再就成功的把一個自定義的trigger關聯到了一個Action上,這和普通的keydown事件不一樣,因爲咱們對裏面的key進行了過濾,因此如今,只有當你按下A或者B鍵的時候,纔會引起Action,其它的按鍵是無效的。

相關文章
相關標籤/搜索