在很长一段时间里,Windows UI都由图形设备接口(Graphics Device Interface,GDI) API进行管理,Windows XP发布以后,GDI发展为GDI+。GDI和GDI+使基于光栅的API,所有标准Windows UI控件都使用它们进行自我呈现。开发人员可以改变任何标准控件的默认视觉外观的唯一方法就是重写用于呈现控件UI的Windows事件。
Windows Presentation Foundation (WPF)图形子系统在.NET Framework 3.0中引入(随后成为Windows Vista的内置组件)以后,GDI范式发生了根本性变化。WPF并不采用命令性的方式(也就是,使用以某种编程语言编写的指令)创建UI,而采用可扩展应用程序标记语言(eXtensible Application Markup Language,XAML)来描述UI元素,其中XAML是可扩展标记语言(eXtensible Markup Language,XML)的衍生语言。WPF还利用计算机中内置的图形处理单元(Graphics Processing Unit,GPU)的强大硬件加速功能。
Silverlight (Microsoft的丰富Internet应用程序框架)也使用XAML来定义用户界面。程序清单1-4中显示的是一个非常简单的XAML示例,即在Silverlight中实现“Hello, World”应用程序。
程序清单1-4:“Hello, World”应用程序的MainPage.xaml文件
<UserControl x:Class="HelloFromSL.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock FontSize="48">Hello from Silverlight</TextBlock>
</Grid>
</UserControl>
上述代码会生成图1-7中显示的页面。之所以会显示该图中的文本,是因为程序清单1-4中的粗体代码行。
图1-7 程序清单1-4的输出结果
WPF和Silverlight都是非常出色的技术。使用它们就好像是将20世纪30年代的兰博基尼引擎(GDI/GDI+类型)替换为2012年生产的最新水平的引擎(WPF/Silverlight)。这些技术不仅可以定义UI,而且可以在不使用任何代码或仅使用少量代码的情况下声明其动态行为。这些技术将UI与应用程序的逻辑(模型)层连接起来。下面列出了这些技术的部分重要功能。
这些技术经过设计和定制,从而使可以创建丰富的、功能强大的桌面或Internet应用程序,以产生出色的用户体验。除了提供简单的UI元素(如文本框、按钮、列表、组合框、图像等)以外,它们还允许自有创建包含动画和媒体元素的内容,如视频和音频。与使用矩形UI元素的传统(部分用户甚至可能会认为是单调乏味的) UI方法不同,通过WPF和Silverlight,可以更改应用程序的整个面貌。
它们提供非常灵活的布局系统,从而可以轻松地创建用户能够自动调整以适应诸多因素(例如,可用屏幕大小、显示的项数量、显示的元素大小以及缩放等)的布局。
样式和模板是帮助实现开发人员与设计人员之间的顺畅协作的功能。开发人员实现应用程序的逻辑,因此,他们绝不会直接设置UI的可视化属性。相反,他们会通过编程方式指出UI的状态发生了更改。设计人员创建UI的可视化效果,同时考虑UI各种可能的状态。
Silverlight和WPF以声明方式(也就是说,不需要代码)应用数据绑定,所谓数据绑定,就是一种用于将UI的元素连接到数据或者其他UI元素的技术。数据绑定可以与样式、模板、布局甚至动画结合使用。这种机制在业务线(Line-Of-Business,LOB)应用程序中特别有用。借助来自数据库并由应用程序逻辑处理的数据绑定信息,可以以声明方式将元素绑定到UI元素。
注意:使用布局系统来排列UI上的各个元素。通过灵活的布局系统(如WPF、Silverlight和Windows 8后台的布局系统),可以定义UI元素之间的关系,并且这些元素会在运行时自动放置在UI上。例如,可以定义一个布局系统,以便其将UI控件排列在两列,并且均匀分布。
注意:WPF和Silverlight中的样式和模板的使用方式与文档发布系统中的样式和模板类似。样式收集UI元素的常用特性,而模板是包含表示UI元素内容的占位符和框架。
WPF和Silverlight的主要优点可能在于它们有助于明确区分属于开发人员且与UI相关任务和由设计人员执行的任务。对于现今以使用者为中心的应用程序,相比于开发人员任务和设计人员任务交织在一起的方法,这是一个很明显的优势。
注意:XAML在Windows 8风格的应用程序中扮演非常重要的角色,相关内容将在第3章中详细介绍。