第一章
WPF编程概览
Windows Presentation Foundation (WPF)是包含微软.Net3.0和3.5框架的下一代图形平台。你可以创建包括文档,多媒体,2D和3D图形,动画和类似web特点的高级用户接口(UI)。构建在.NET3.0和3.5框架之上,WPF使用Windows操作系统为应用程序提供了一个托管的环境。像其他.NET3.0和3.5的特色一样,WPF可以在Windows Vista, Windows XP, Windows Server 2003, 和 Windows Server 2008上使用。
在前-WPF时代,开发一个Windows应用程序需要使用各种不同的技术。例如,为了添加给你的程序一个窗体和用户控件,你需要使用.NET框架里的Windows Forms。你必须使用GDI+去创建图像和2D图形。为了添加一个3D图形,你需要使用Direct3D或者OpenGL。
WPF被设计成应用程序开发的一个统一解决方案,它提供了不同技术的无缝集成。使用WPF,你可以创建矢量图形或者复杂的动画,并且将多媒体纳入你的应用程序以解决刚才列出的所有问题。
WPF的新特色
WPF引进了一些在你开发WPF应用程序的时候可以利用的新特色。为了利用强大的新图形硬件,WPF实现了一个基于Direct3D技术的矢量图形模型。这就允许图形根据特定屏幕分辨率进行拉伸的时候不丢失图片质量,这些对固定大小的光栅图形来说是不可能完成的。WPF利用Direct3D进行基于矢量的渲染,用到任何视频卡上的图形处理单元和内置的DirectX的实现。预测到未来的技术,比如高分辨率显示,WPF使用浮点逻辑像素系统并支持32位RGB颜色。
更进一步,未来使表现UI和用户交互更简单,WPF引进了新的基于XML的语言,叫做可扩展应用程序标记语言(XAML)。XAML运行应用程序在设计期间或运行时动态解释和操作用户接口元素。它使用后台代码模型,和ASP.NET类似,允许设计者和开发者并行工作,并将他们的工作无缝地组合到一个让人信服的用户体验中。当然,在你开发WPF应用程序的时候,WPF也允许你选择不使用XAML文件,这意味着你仍能完全使用C#,C++或者Visual Basic语言开发你的应用程序。
另一个新特色是独立于分辨率的布局。所有的WPF布局尺寸使用独立于设备的像素进行指定。一个独立于设备的像素是指每英尺96单位大小和独立于分辨率,因此不管你在72DPI(点每英尺)的监视器上或者19200DPI的打印机上渲染,你的结果都是相似的。
XAML基础
前面提到,使用XAML创建UI是WPF一个特色。在这部分,我将介绍XAML它的结构和语法。一旦你理解了XAML的基础,你就能轻易地在WPF里创建一个UI和布局。
为什么需要XAML?
鉴于WPF应用程序可以完全使用代码创建,就很自然要问“为什么我开始就需要XAML?”原因可以追溯到复杂、丰富的图形化应用程序的高效实现的问题。很久以前,开发者们意识到开发这种程序最有效的方式是将图形部分从底层代码分离。这样,设计者就能工作的图形部分,开发这就能工作在图形后面的代码部分。两部分都能被设计和完善,而不用担心任何版本问题。
在WPF以前,将代码从图形内容分离是不可能的。例如,当你使用Windows Forms工作的时候,你使用C#代码或者其他语言定义每一个窗体的实例。当你给UI添加控件和配置他们的时候,程序需要调整代码以符合窗体类。如果你想声明你的窗体,按钮,和其他设计者开发的图形控件,你必须提取图形内容,并将它导出成一个bitmap格式。这对简单的应用程序来说是有效的,但是对于复杂,动态的应用程序来说是有局限的。另外,bitmap格式的图形当大小改变的时候会丢失质量,。
WPF引进的XAML技术解决了这个问题。当你在Visual Studio里开发一个WPF应用程序的时候,创建的窗体并没有变成代码。它是被序列化到一个XAML标签里。当你运行这个应用程序的时候,这些标签用来生产组成UI的对象。
XAML不是开发WPF程序必须的。你可以完全用代码实现你的WPF应用程序;然而,代码里创建的窗体和控件将被锁定到Visual Studio环境中,只有程序员可用。没有办法从代码里分离图形部分。
换句话说,WPF不一定需要XAML。但是XAML开启了一个合作的新世界,因为很多设计工具可以理解XAML格式。