本章内容
l 回顾过去
l 进入WPF殿堂
l 作为.NET Framework的组成部分
通常,电影和电视中的人物都是对现实生活中的人的夸张描述。他们比日常人物更有吸引力,他们反映敏捷,对所要做的事情总是把握准确,并且他们使用的软件也和其人一样出色。
第一次给我留下深刻印象的是在1994年。当时我正在看一部叫作《叛逆性骚扰》(Disclosure,1994年出品)的电影,这部电影捧红了迈克尔·道格拉斯(Michael Douglas)和戴米·摩尔(Demi Moore出演),还捧红了一个电子邮件程序,不过它看上去和Microsoft Outlook完全不同。在整部影片中,这个程序的各种不同的可视化特性让我们如赴盛宴:一个旋转的三维字母“e”;消息打开时会展开,删除时又会被撕碎;可以支持“上墨(inking)”;打印消息时,会有平滑的动画(这个电子邮件程序还不是这部电影中最不切实际的软件,它还有一个“虚拟现实的数据库”,我们暂且不表)。
先别管可用性!长久以来,好莱坞的电影让我们明白,真实世界中的软件并没有达到应有的水平。你也能想到几个在电视或电影中见过的有意思的软件。但是现在,真实世界中的软件开始赶上好莱坞的标准!从传统的操作系统(例如Mac OS或最近的Windows Vista)中、为TiVo或Xbox设备设计的软件中,还有网页上的Flash动画中,你可能已经看到这样的趋势了。用户正对软件的使用体验充满越来越高的期待,一些公司正将大量时间和金钱投入到用户界面上,力求与竞争对手有所不同。
微软现在有一个新的解决方案,可以帮助人们创造21世纪的软件,它将满足这些高要求,却可以在更短的时间里、花更少的钱来做到。这个解决方案就是Windows Presentation Foundation(WPF)。
1.1 回顾过去
目前大多数基于Windows的用户界面都使用两种主要技术——GDI和USER子系统,它们是在1985年随Windows 1.0引进的。不过这几乎已经是技术世界的史前文物了。在二十世纪九十年代早期,OpenGL(由SGI公司创建)成为了一种在Windows或非Windows系统上进行高级2D和3D的图形开发的流行图形库。从事计算机辅助设计、科学的可视化和游戏开发工作的人们大量使用它。DirectX是1995年由微软引进的技术,为2D图形、输入、交流、声音提供新的高性能处理方法,最终扩展到对3D的支持(1996年随DirectX 2推出)。
在过去这些年里,GDI和DirectX得到了许多改进。GDI+是在Windows XP时代引进的,构建在GDI顶层,并添加了对alpha渲染和渐变刷子的支持。DirectX(顺便说一句,这是Xbox使用的技术)正不断地推出新版本,一次次地冲破对计算机图形应用方面的限制。随着2002年.NET和托管代码的推出,开发人员开始享受一种高生产率的创建Windows(和Web)应用程序的模型。此时,(构建在GDI+之上)的Windows Forms成为C#、Visual Basic和(相对较少的)C++程序员们在Windows上创建新用户界面的主要方式。但是它仍然具有GDI+和USER所有基本的限制。
从DirectX 9开始,微软为托管代码配备了一个DirectX框架(很像在过去特别为Visual Basic配备了库),并最终引申成为XNA框架(XNA Framework)。虽然它允许C#开发人员不需要处理复杂的.NET/COM互操作就可以使用DirectX,但这些托管框架并不比非托管的框架使用起来更加简单,除非你是在写一个游戏。(写游戏更加简单,是因为XNA框架包括了新的专门用于游戏开发的类库,并且可以与一些功能强大的工具一起工作,如XNA Framework Content Pipeline和XNA Game Studio Express。)
因此,虽然在1990年代中期你就可以用那种非GDI的技术(实际上可能是DirectX或OpenGL与GDI的融合技术)开发一个基于Windows的电子邮件程序,使它具有如在《叛逆性骚扰》中看到的3D效果,但这样的技术即使在10年后也很少会在主流Windows应用程序中使用到。这是由于以下几方面的原因:为了获得更好的体验所需的硬件直到最近才变得普遍起来;使用替代技术而不使用硬件已经变得十分困难;基于GDI的体验已经被认为是“足够好”的方案了。
图形硬件继续变得越来越好(也越来越便宜),而消费者的期望也继续攀升,但直到现在,开发体验仍然没有得到显著的提升。近些年,开发人员开始自己尝试创建个性化的Windows应用程序或控件。一个简单的例子是使用位图来制作按钮而不使用标准按钮控件。这些定制化的东西不仅开发起来十分昂贵,而且经常只是产生昙花一现的绚烂效果。这样的应用程序经常变得无法访问;无法运行在部分受信的环境中;在远程桌面中无法很好地显示;也无法很好地处理高分辨率的设置,还会有其他一些可视化的小故障。





