自定义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,其它的按键是无效的。

相关文章
相关标签/搜索