高立军
摘 要:Windows 8是微软公司于2012年推出的继Windows7之后的新一代电脑操作系统,采用与Windows Phone 8相同的NT 内核,该操作系统除了具备微软适用于笔记本电脑和台式机平台的传统窗口系统显示方式外,还特别强化适用于触控屏幕的平板电脑设计,使用了新的接口风格Metro,这种应用程序和我们传统看到的Windows应用最大的不同就是它是为触摸屏设备而设计的。
关键词:Metro 开发模式 窗口和布局
中图分类号:TP31 文献标识码:A 文章编号:1674-098X(2014)06(b)-0039-02
在新的开始菜单里,Win8在支持触摸屏的同时,定义了一套在Win8上面的手势语言。Win8为触摸设备提供的触摸键盘,使用体验感觉很好,很灵敏,按下去在屏幕上会有被按的效果。除此之外,Win8还带来了以下的几个新特性:支持ARM * 2;Win8一个账户可以伴随着你在不同的设备上;更加有效的App管理方式;支持多种设备,多种屏幕尺寸;更加社交化,以及和微博无缝整合。
1 Windows 8 开发模式
目前Metro app支持三种不同的开发模式:(1)XAML+C#/VB;(2)XAML/DirectX+C++;(3)HTML5+JS+CSS,组成部分Model、View、ViewModel。View是指UI界面。ViewModel是View的抽象,负责View与Model之间信息转换,将View的Command传送到Model。Model是数据访问层。
2 MVVM(Model-View-ViewModel)
View与ViewModule连接可以通过下面的方式:Binding Data实现数据的传递。command实现操作的调用,ttachBehavior实现控件加载过程中的操作。View没有大量代码逻辑。结合WPF、Silverlight绑定机制,MVP演变出了MVVM,充分利用了WPF、Silverlight的优势,将大量代码逻辑、状态转到 ViewModel,可以说MVVM是专门为WPF、Silverlight打造的。View绑定到ViewModel,然后执行一些命令在向它请求一个动作。而反过来,ViewModel跟Model通讯,告诉它更新来响应UI。这样便使得为应用构建UI非常的容易。往一个应用程序上贴一个界面越容易,外观设计师就越容易使用Blend来创建一个漂亮的界面。同时,当UI和功能越来越松耦合的时候,功能的可测试性就越来越强。Windows 8中可以启动多个应用并在其中切换,我们没有必要担心降低系统速度或消耗电池电量,因为系统会自动挂起(有时会终止)在后台正在运行的应用。设计良好的应用可以由系统挂起、终止以及重新启动来体现,并且在这过程中看起来该应用一直在运行。
3 Metro Application原理
(1)当激活了应用时,无论任何原因,系统都会发送Activated事件;(2)每当用户切换到桌面或其他应用时,系统都会挂起你的应用,系统会发送Suspending事件;(3)每当用户切回到你的应用时,系统就会恢复你应用,系统会发送Resuming事件。
当用户启动应用程序,该应用在生命周期中可以发生哪些变化呢?(1)运行的应用,可以进行挂起,变成挂起的应用;(2)挂起的应用,可以进行恢复,变成运行的应用;(3)挂起的应用,如果系统内存不足,将直接被干掉。
在任何桌面应用程序中,窗口都是基本的组成要素,以至于操作系统都根据它命名。尽管Metro提供了导航应用程序的模型,该模型用于创建能够将任务分割到单独页面中的应用程序,但是对于创建应用程序,窗口仍然是这一领域的象征。
4 窗口
Window类继承自ContentControl类,这意味着它只能包含当子元素(通常是一个布局容器,如Grid控件),并且可以使用由Background属性设置的画刷绘制背景。通常还可以使用BorderBrush和BorderThickness属性在在窗口周围添加边框,但是 该边框会被添加到窗口框架之内(在客户去边缘周围)。可以通过将WindowStyle属性设置为None完全移除窗口框架,从而可以创建一个完全定制的窗口。此外Window类还添加了不少部分成员,任何一个Windows编程人员都会熟悉这些成员。最明显的是与外观相关的属性,使用这些属性可以改变窗口客户区部分的显示方式。Application类提供了用于访问其他窗口的两个工具:MainWindow和Windows属性。如果希望使用更灵活的方式跟踪窗口,可以在Applocation类中添加静态属性。窗口交互是指获取其他窗口的引用。作为通信规则,应当竟可能的减少窗口之间的交互需要,因为这会没有必要的增加代码的复杂性,如果确实需要根据一个窗口的动作修改另一个窗口的控件,可以在目标窗口中添加一个方法,从而使窗口的接口变得简单易行。对于时髦的客户端应用程序,经常会使用形状不规则的窗口,且对于Metro应用程序使用不规则窗口会更常见。在Metro中创建和使用基本形状的窗口是非常容易的,然而创建精致的、具有专业外观的窗口需要完成更多工作,并且很可能需要由优秀的图形设计人员创建轮廓并设计背景插图。
5 布局
Windows 8为开发人员提供丰富的布局控件,以达到应用布局设计需求。其中包括:* Grid、Canvas、StackPanel、WrapGrid、VariableSized WrapGrid、Virtualizing StackPanel以上布局控件皆派生自Panel类,而Panel类可以装载不同类型的控件作为子控件。Grid是类似于HTML表格的一种布局控件,由于其灵活性高,所以在应用设计中经常被使用到。一个Grid控件包含一个Row(行)和Column(列)的集合。开发人员可以将不同的对象控件布置在不同的行列中,达到位置控制的效果。endprint
6 事件与命令
刚开始接触Metro时,可能会在自己并不知晓的情况下就用到了路由事件。例如,当在Visual Studio设计器中向窗口添加一个按钮,并将其命名为myButton,然后双击该按钮时,Click事件将挂接在XAML标记之内,它的事件处理程序会添加到Window类的代码隐藏中。这种感觉与在 Windows 窗体和ASP.NET中挂接事件并无二样。实际上,它比较接近ASP.NET的代码编写模型,但更类似Windows窗体的运行时模型。
路由事件概述。
7 路由事件
气泡事件最为常见,它表示事件从源元素扩散(传播)到可视树,直到它被处理或到达根元素。这样就可以针对源元素的上方层级对象处理事件。例如,可向嵌入的Grid元素附加一个Button.Click处理程序,而不是直接将其附加到按钮本身。气泡事件有指示其操作的名称(例如,MouseDown)。隧道事件采用另一种方式,从根元素开始,向下遍历元素树,直到被处理或到达事件的源元素。这样上游元素就可以在事件到达源元素之前先行截取并进行处理。根据命名惯例,隧道事件带有前缀Preview(例如PreviewMouseDown)。直接事件类似.NET Framework中的正常事件。该事件唯一可能的处理程序是与其挂接的委托。通常,如果为特殊事件定义了隧道事件,就会有相应的气泡事件。在这种情况下,隧道事件先触发,从根元素开始,下行至源元素,查找处理程序。一旦它被处理或到达源元素,即会触发气泡事件,从源元素上行,查找处理程序。气泡或隧道事件不会仅因调用事件处理程序而停止路由。如果想中止隧道或气泡进程,可使用传递的事件参数在事件处理程序中将事件标记为已处理。一旦的处理程序将事件标记为已处理,该事件便不会传给任何其他处理程序。实际上,事件路由仍在继续起作用,可利用UIElement.AddHandler的替换方法在代码中显式挂接事件处理程序,该方法有一个额外的标记,可以有效指出“即使事件被标记为已处理也可调用我”。为了让元素能处理在不同元素中声明的事件,WPF支持附加事件。附加事件也是路由事件,它支持元素 XAML 形式的挂接,而非声明事件所用的类型。例如,如果想要Grid侦听采用气泡方式通过的Button.Click事件,仅需按如下所示进行挂接即可。
8 命令系统的基本元素
命令(Command):实现了ICommand接口的类,经常使用的有RoutedCommand类。命令源:是命令的发送者,是实现了ICommandSource接口的类,大部分界面的控件都实现了这个接口,Button,MenuItem等等。命令目标:命令的接收者,命令目标是实现了IInputElement接口的类。命令关联:负责一些逻辑与命令关联起来,比如判断命令是否可以执行,以及执行完毕后做一些处理。四个命令元素之间的关系:在Windows Store app开发中,数据绑定非常的重要,它提供了一个简单的方法,使我们的程序可以很方便的显示数据并与数据进行交互。数据绑定:数据绑定在UI控件中显示数据是非常重要的一部分内容。当任意一个UI控件使用了绑定,那么它将会显示出相应的数据。当然,很重要的一个因素就是当绑定的数据发生了改变,此时UI控件显示的内容就会自动的改变。同样,当用户在UI控件上做了改变,这些变动的数据也会被自动保存到数据对象中。
参考文献
[1] 欧运娟.windows系统管理与应用[M].北京:人民邮电出版社,2014.
[2] Jeremy Likness.windows8应用开发[M].北京:人民邮电出版社,2014.endprint