随着Visual Studio 2013的发布,New Behavior SDK也一起出现了。和Expression Blend SDK相似,包括各种内置行为(behavior和action),可以用来为你的应用增加交互性,和Blend一起使用时可以无需编写任何代码。Behavior SDK使用时唯一要做的就是实现他们的接口。

Behavior和Action

  • 在应用中,能够给UI元素添加多个behavior,其中,每个行为(behavior)都有一个方法,当行为被附加到依赖对象时会被调用,从依赖对象移除时也会调用。
  • 而对于action,每个action只有一个确定的方法,且仅当符合特定条件是才会被调用,条件可能是事件(event),也可能是数据状态,甚至是任何东西。

使用时behavior和action会一起使用,behavior指定了action被执行的原因和条件,取代了旧版SDK中的触发器(Trigger)。

命名空间

SDK内容

Behavior SDK内容主要有两个部分,分别是:

  1. 少量通用的Behavior和Action,可以直接拿来使用,主要在Microsoft.Xaml.Interactions.Core及Microsoft.Xaml.Interactions.Media命名空间下,他们包括:

Actions:

l   CallMethodAction : 当被执行时可以在特殊对象上调用一个方法。

l   ChangePropertyAction :当被执行时可以改变特定属性的值。

l   GoToStateAction : 当被执行时可以改变特定FrameworkElement的VisualStatus。

l   InvokeCommandAction : 当被执行时可以调用特定的ICommand命令。

l   NavigateToPageAction : 当被执行时可以跳转到特定的Page页面。

l   ControlStoryboardAction : 当被执行时可以改变特定故事板的状态。

l   PlaySoundAction : 当被执行时可以播放特定声音。

Behaviors:

l   DataTriggerBehavior : 当绑定的数据满足特定条件时,执行相应的Action。

l   EventTriggerBehavior :当侦听的事件被触发时,执行相应的Action。

l   IncrementalUpdateBehavior :允许ListView和GridView的内容增量更新的行为,可以在他们的ItemTemplate中使用,以提供平滑的体验。

2.用于实现自定义behavior的接口和工具,主要在Microsoft.Xaml.Interactivity命名空间下,主要使用的接口为IBehavior及IAction。

如何使用?

最简单的方法是使用Blend自动生成,当然在xaml中手写也是完全可以的。

Blend生成的代码如下,这里我们使用的是CallMethodAction:

<Interactivity:Interaction.Behaviors>

                <Core:EventTriggerBehavior EventName="Click">

                    <Core:CallMethodAction

                              TargetObject="{Binding Mode=OneWay}"

                              MethodName="SayHello"/>

                </Core:EventTriggerBehavior>

    </Interactivity:Interaction.Behaviors>

其他Action使用示例,示例代码如下:

  1. NavigateToPageAction
<Interactivity:Interaction.Behaviors>

            <Core:EventTriggerBehavior EventName="Click">

<Core:NavigateToPageAction TargetPage="BehaviorDemo.CallMethodActionDemo"/>

            </Core:EventTriggerBehavior>

</Interactivity:Interaction.Behaviors>

2.InvokeCommandAction

 <Interactivity:Interaction.Behaviors>

                <Core:DataTriggerBehavior Binding="{Binding InputText}"

                        ComparisonCondition="NotEqual" Value="">

                    <Core:InvokeCommandAction Command="{Binding

                                        ChangeColorCommand, Mode=OneWay}"/>

                </Core:DataTriggerBehavior>

            </Interactivity:Interaction.Behaviors>

3.ChangePropertyAction

<Interactivity:Interaction.Behaviors>

                   <Core:EventTriggerBehavior EventName="GotFocus">

            <Core:ChangePropertyAction PropertyName="Background"

                                        Value="Purple"/>

        </Core:EventTriggerBehavior>

        <Core:EventTriggerBehavior EventName="LostFocus">

            <Core:ChangePropertyAction PropertyName="Background"

                                        Value="LightGray "/>

              </Core:EventTriggerBehavior>

        </Interactivity:Interaction.Behaviors>

4.ControlStoryboardAction

<Interactivity:Interaction.Behaviors>

        <Core:EventTriggerBehavior EventName="Click">

            <Media:ControlStoryboardAction

                Storyboard="{StaticResource myStoryboard}"

                ControlStoryboardOption="TogglePlayPause"/>

        </Core:EventTriggerBehavior>

</Interactivity:Interaction.Behaviors>

5.GoToStateAction

<Interactivity:Interaction.Behaviors>

        <Core:EventTriggerBehavior EventName="PointerPressed">

            <Core:GoToStateAction StateName="Pressed"/>

        </Core:EventTriggerBehavior>

        <Core:EventTriggerBehavior EventName="PointerReleased">

            <Core:GoToStateAction StateName="UnPressed"/>

        </Core:EventTriggerBehavior>

</Interactivity:Interaction.Behaviors>

6.PlaySoundAction

<Interactivity:Interaction.Behaviors>

        <Core:EventTriggerBehavior>

            <Core:CallMethodAction MethodName="StartTimer"

                TargetObject="{Binding Mode=OneWay}"/>

        </Core:EventTriggerBehavior>

        <Core:DataTriggerBehavior Binding="{Binding CurrentTime.Second}"

                ComparisonCondition="GreaterThanOrEqual" Value="0">

            <Media:PlaySoundAction Source="Assets/beep.wav"/>

        </Core:DataTriggerBehavior>

</Interactivity:Interaction.Behaviors>

总结 

Behavior SDK的behavior和action组件能够将特定元素的事件和参数传递到相应模型上,这对于使用MVVM框架来说是十分方便的。

更为详细的内容,可以观看官方的Behavior SDK文档,分别如下:

API参考:https://msdn.microsoft.com/zh-cn/library/dn458350.aspx

MSDN博客:http://blogs.msdn.com/b/hanxia/archive/2013/10/17/windows-8-1-store-behavior.aspx

其他资源:http://julmar.com/blog/programming/behaviors-in-windows-8-1-store-apps/

http://www.timmykokke.com/2013/09/behaviors-sdk/

Windows通用应用开发手记-Behavior SDK概述的更多相关文章

  1. windows安装安卓开发环境Eclipse+SDK+ADT

    准备条件 操作系统:win7 64位 需要的资源:JDK.Eclipse.SDK.ADT 步骤简介: 第一步:下载安装最新版JDK 第二步:下载安装Eclipse 第三步:下载安装SDK 第四步:安装 ...

  2. HoloLens开发手记 - HoloLens shell概述 HoloLens shell overview

    使用HoloLens时,shell是由你周围的世界和来自系统的全息图像构成.我们将这种空间成为混合世界(mixed world). shell包含了一个可以让你将全息图像和应用放置在世界中的开始菜单( ...

  3. 《Windows IoT 应用开发指南》

    物物互联的时代已经到来,智能家居.智慧校园.智慧交通.可穿戴.无人机.全息投影,各种各样的新名词.黑科技层出不穷.当我们为五年前能够通过手机控制家电而欣喜若狂的时候,可曾憧憬过当前使用增强现实设备完成 ...

  4. 《深入浅出Windows 10通用应用开发》

        <深入浅出Windows 10通用应用开发>采用Windows 10的SDK进行重新改版,整合了<深入浅出Windows Phone 8.1应用开发>和<深入解析 ...

  5. Windows 通用应用尝试开发 “51单片机汇编”总结

    一.前言 终于完成windows通用应用“51单片机汇编”,半年前开始玩WindowsPhone开发的第一个真正意义上的App(还很多缺点=_=).开发从1月中旬考完试到今天,期间实习了半个月,玩了几 ...

  6. 一、Microsoft Dynamics CRM 4.0 SDK概述

    Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...

  7. Windows phone应用开发[17]-xap提交异常处理

    在windows phone 应用提交操作上早在2011年时就写过一篇Windows phone 应用开发[4]-应用发布,那时wp应用提交官方市场的流程繁杂[超过了5步].因为上传和填写应用信息页面 ...

  8. Windows统一平台: 开发小技巧

    Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...

  9. Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用

    概述 Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行,这也会是国内举办的最后一届 Tech Summit,2019 年开始会以 Mi ...

随机推荐

  1. python遍历删除列表的方法

    for item in list(somelist): somelist.remove(item)

  2. Android 获取设备信息 异常

    /**获取设备信息 * @param c * @return */ public static void setDeviceInfo(Context c,RequestParams params){ ...

  3. php实例源码之获取mysql表中所有行和列

    本文章向大家介绍php获取mysql表中所有行和列的源码,主要使用到mysql_num_rows和mysql_fetch_row等php的数据库操作函数,该实例有助于大家熟悉PHP mysql数据库编 ...

  4. 静态修饰符(关键字static)

    1.Static修饰的方法或变量通常称为类方法和类属性 2.静态方法中不能使用this和super关键字,也不能做为局部变量使用 3.在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成 ...

  5. Release时error c1083 无法打开包括文件

    Release时error c1083 无法打开包括文件, 但Debug时没事. 项目里面包含了其实项目的头文件, 头文件目录就放在项目下面, 这个头文件里面调用其它头文件, 采用的是<xx/y ...

  6. 关于对inputstream流的复制

    今天因为项目需要,获取到一个inputstream后,可能要多次利用它进行read的操作.由于流读过一次就不能再读了,所以得想点办法. 而InputStream对象本身不能复制,因为它没有实现Clon ...

  7. web测试一般分为那几个阶段,哪些阶段是可以用工具实现的,都有些什么工具,哪些阶段必须要人工手动来实现呢?

    这是我在知乎上遇到的一个问题: web测试一般分为那几个阶段,哪些阶段是可以用工具实现的,都有些什么工具,哪些阶段必须要人工手动来实现呢? 首先这个提问本身就是有问题的, 没有哪个阶段是用工具实现的, ...

  8. jQuery 中 data 方法的实现原理

    前言:jQuery 作为前端使用最多最广泛的 JS 库,其源码每个 JSer 都应该研究一下.早就打算看却一直被各种事拖着,上次某公司面试时被问到 jQuery 中 data 方法是如何实现的,结果答 ...

  9. C++学习基础三——迭代器基础

    迭代器分为两种:一种是iterator,另一种是const_iterator.两者都可进行访问容器中的元素,不同之处是:(1)const_iterator类型只能用于读取容器内的元素,不能更改其值:而 ...

  10. 建议Javascript以后都用严格模式

    建议以后都在js文件的头部加上 "use strict"; 现在主流的浏览器都支持,不支持的浏览器也会忽略掉. 可以使我们写的更规范,可控: 有些错误编译的时候就会出现,方便排错: