Silverlight Behavior技术(二)

Silverlight 3中的Behavior技术(二)

     OK,说了这么多,我们还是先来看看该怎么在开发环境当中使用Behavior技术。当然,就单纯的Silverlight开发人员(不管是Designer或是Developer)来说,开发环境安装好Blend
3是最低的要求,同时当您安装了Silverlight 3 SDK以及Blend 3 SDK、Silverlight 3
Toolkit等套件之后,您可以直接在Blend 3当中建立一个Silverlight应用程序,接着在场景中布置一个Button和一个TextBlock,并且随意设计一个动画。  接着,请切换到Assets页标签,若您有正确的安装Blend 3 SDK,您会看到Assets页卷标下有Behaviors选项,在列出的项目中,你会看到有一个ControlStoryboardAction:  

  请点选它并拖曳到Button上,然后切换到Object and
Timeline页标签,您会发现Button控件底下多了个ControlStoryboardAction对象:


   接着点选该对象,切换到属性窗口,您接着会发现,可以透过开发环境来设定ControlStoryboardAction对象的属性(请注意不是Button的属性,别点错):


   完成之后,请先建置(Build)此应用程序,成功后请接着执行此应用程序,您会发现在不需要写任何程序代码的状况下,当使用者按下Button1(也就是Button1的Click事件触发后),Storyboard动画就自动被播放了。

  如果您仔细观察Action的设定窗口,会发现其实场景中任何控件(不只是Button)的任何事件(不只是Click)都可以做为特定Action的触发条件。而每一个Actionr都代表着一种行为,而程序设计人员(developer)可以设计出各式各样的Action,让设计师(Designer)直接使用。

  那Trigger、Action、Behavior三者之间究竟有何关系呢?

  从上面的操作中我们可以知道,Action是经过程序设计师封装好的某种行为(功能),我们可以把一些常用的代码段,例如上面用到的『动画拨放』、或是先前我们提过的『发一封信』、或『将窗体上的数据存入数据库』…等『功能』整理成一个个的Action,而开发人员只需要把Action拖曳到特定的对象上即可使用。

  当然,拖曳到目标对象上之后,还得要设定这个Action的相关信息,也就是该Action的属性(如果有的话),以及该Action被触发的时机,而这就是所谓的Trigger了。


  在Silverlight中,预设的Trigger有底下几种:

  1. EventTrigger:最常用的触发器,可选择在控件的特定事件发生时触发,例如Loaded、MouseLeftButtonDown、GotFocus…等。

  2. TimerTrigger:可设定每n毫秒触发一次,总共要触发几次或随时间持续触发。

  3. KeyTrigger:可设定在特定按键被按下时触发,可捕捉到键盘上的一般按键与功能键,亦可抓取Ctrl, Alt等组合控制键。

  4. StoryboardCompletedTrigger:在特定动画拨放完毕后触发。


  请注意,这些Trigger是配合着Action使用的,你会发现,每一个Action都可以透过Blend设定Trigger,并透过Trigger来触发执行此Action,如此一来,我们就可以相当灵活的在场景中特定控件的特定事件发生时,来执行特定工作。

  也就是说,在这个机制下,只要程序设计师预先写好Trigger与Action,Designer就可以在完全不撰写任何程序代码的状况下,来开发出一个Silverlight应用系统或网站。

  我们刚才提到了Action与Trigger,那Behavior呢?难道Behavior不需要Trigger吗?其实不是的,应该说,Behavior是内建(包含)了Trigger!!!

  你会发现当场景中的某一个对象被套用了Behavior之后,不需要设定任何Trigger,该对象就会自动拥有某种功能,就好像我们刚才介绍了的MouseDragElementBehavior一样,当该Behavior套用在某个对象上,该对象就直接支持拖曳行为了,因此,你可以将Behavior直接想象成Trigeer与Action的结合。

  我们先谈到这边,下一篇则要来介绍Action的开发方式...

  本文来自dotnetWalker的博客,原文地址:http://blog.csdn.net/dotnetwalker/article/details/5438773

原文地址:https://www.cnblogs.com/fxf568/p/2744318.html