要赢得世界,必须在恰当的时间做出恰当的事。这一点,微软做到了。历经微软DOS,Win 31, Windows 95, Windows 98, Windows 2000, Windows XP, 一路走来,一次比一次热闹,一个比一个精彩、炫丽。Windows Vista的宣传更是轰轰烈烈,喧嚣日上。初见Windows Vista,都会被它的酷炫界面所吸引,哇!原来Windows也可与Mac一样酷、一样炫!在这炫丽的幕后有一个默默无闻的英雄,它就是今天我们所讨论的主角——WPF。
1.WPF是什么
Windows Presentation Foundation ,缩写为WPF,其原来代号为“Avalon”,因“我佩服”拼音首字母组合一样,国内有人调侃地称之为“我佩服”。WPF是微软新一代图形系统,运行在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于WPF。
程序员在WPF的帮助下,要开发出媲美Mac程序的酷炫界面已不再是遥不可及的奢望。 WPF相对于Windows客户端的开发来说,向前跨出了巨大的一步,它提供了超丰富的.NET UI 框架,集成了矢量图形,丰富的流动文字支持flow text support,3D视觉效果和强大无比的控件模型框架。
业内著名人士惊呼:“这一天终于来了!”
WPF与XAML
20世纪90年代中期,基于SGML,衍生出的XML的应用已变得极为流行。许多开发者把XML视为解决所有计算机开发问题的灵丹妙药,XML几乎无处不在。
针对Vista操作系统,微软提供了专门的界面开发语言XAML(eXtensible Application Markup Language,可扩展应用程序标记语言)。XAML作为微软Vista操作系统的界面描述语言,它可对WPF程序的所有界面元素进行定制,从而构建炫丽夺目的软件界面。
XAML作为界面描述语言(注意是“语言”),它最终会被编译成.Net后台代码。因此,它能够同后台进行逻辑处理的.NET语言如C#、J#、C++、VB等协同工作,其工作性质类似于ASP.NET中的HTML。XAML的产生,使得界面描述代码和程序代码得以分开,从而提高了开发效率并有利于团队开发。
同HTML一样,XAML既可以直接编码,也可以由专门的工具生成。目前最好的XAML编辑器是Expression Blend,但你也可以使用Windows SDK for Windows Vista中的XAMLPad,但功能却显得太简单。
2.WPF何以令人佩服
一直以来,完美的用户体验是桌面应用程序和Web应用程序中的一大障碍。许多开发人员绞尽脑汁将界面设计得美观炫丽些、互动感强些,但费了九牛二虎之力,还是差强人意。由于技术上的限制,Web 应用程序无法提供与桌面应用程序同样丰富的用户体验。而随着电脑与每个人的生活、工作变得密不可分,人们对桌面应用程序的要求也不断提高。永不满足的人们要求桌面应用程序能够播放视频、运行动画、采用二维或三维图形,以及调用不同的文档。
想实现这些吗?那就用WPF!来句流行的广告词:用了都说好!
使用 WPF,你可以创建丰富、美妙的连接应用程序,以充分利用 Windows 平台,其中包括 UI、媒体、脱机通信和文档支持。
先来说说WPF程序的设计制作过程。
一般地,大多数WPF程序都将同时包含XAML代码和程序代码。我们首先使用XAML定义程序界面(如前所述,可以手工编写,也可以采用Experssion Blend等可视化工具编写),然后再用.NET语言(C#, VB.Net等)编写相应的逻辑代码。和ASP.NET类似,逻辑代码既可以直接嵌入XAML文件中,也可保存为独立的代码文件。
尽管XAML并非设计WPF程序所必须,我们依然可以按照传统方式使用程序代码来实现界面设计制作。但是,如果使用XAML,界面设计和逻辑设计就可以完全分离。这样,不但使程序的开发和维护更加方便,而且当进行团队开发时,可真正实现“专业的人做专业的事”,把界面设计交给专业的美术设计师们去完成,而让我们精力和时间都宝贵的程序员们专心致志于业务逻辑的实现。真正做到“各尽其能,各施其职”,最终得到一个功能强大、界面一流的WPF程序。这时,就只等用户“满意一笑,开心买单”了。
听说现在的人都讲求实在,讲求效益。那么,WPF给我们的桌面应用程序和Web应用程序带来了哪些实实在在好处呢?
首先,一套编码,桌面应用程序与Web应用程序均可运用,这当然就节省成本啦。当然,某些时间,改改适当代码是必需的。但改动量如此之小,让你很惊异伟大的Microsoft,让你不得不服(WPF的“我佩服”传说就此而来?)。
其次,WPF不仅使美化、多样化了桌面应用程序,也是使Web变得异彩纷呈。WPF使得3D进入Web成为可能。比如,你可以使用矢量图形设计软件(Illustrator, CorelDraw等, 微软也有了!叫“Expression Designer”)设计好图片,然后将图形输出或导出成为XAML格式。然后,你可以在Blend中打开XAML文件,制作成动画,最后生成的也是XAML。通过.Net语言(如C#)进行编程,还可以控制这些XAML。加上有VS2005/2008优秀的开发环境,可谓之“牛B无敌”。XAML+C#是大趋势,必将吸引大批追捧者(从微软.Net的成功,已从一个侧面印证了这一点)。
更多的技术细节。
实际上,WPF 的支持范围远不止基本用户界面应用那么简单,还包括:
(1)文档的变革。之所以称其为“变革”,是因为它不仅可以使用传统的屏幕显示/打印文档(XPS),而且还可以使用 FlowDocument 标记来显示流文档。文档中不仅可以有文字、图片、链接,还可以有三维动画、视频等。试想一下,在某个重要的日子,当你将所有与他/她在一起时浪漫的照片、温馨的视频、甜蜜的话语,加上潇洒的签名,发挥你丰富的想象力,做成一个动感十足的动画,或是丰富趣味的互动游戏,将之保存为一份多媒体文档,在恰当的时间,利用恰当的机会,把它送给他/她的时候,他/她看到之后又是怎样一种感觉呢?在恰当的时间、恰当的地点,由恰当的人,做出恰当的事,这就是最“恰当不过”的了!
(2)图形:WPF 支持创建二维和三维矢量图形。对于二维图形,WPF 提供标准抽象,例如,形状、画笔和绘图笔,同时还允许三维图形定义模型,以用于指定光线和摄像机位置信息。与早期技术(GDI, GDI+)不同的是,WPF 图形并不是使用开发人员所必须了解的单独一组概念进行图形图像绘制,用于图形描述的XAML元素能够与那些用户界面其他元素自然组合。比如按钮,可以是文字,也可是带图形和文字的组合,还可以有更多功能。
(3)图像:WPF使用 XAML 的图像标记,可在应用程序中显示不同格式的图形,包括 JPEG,GIF,PNG及其他格式。WPF依靠WIC(Windows Imaging Component) 为编解码器,以及显示和存储图像的软件提供标准框架。在 WPF 中,通常图像元素可以与其他元素组合,比如按钮,可以显示为图像按钮而不是简单的文本标签。
(4)多媒体视频及音频:WPF可使用MediaElement 标记来显示不同格式的视频和音频,包括 WMV、AVI 和 MPEG等。同样,此元素也可与其他 XAML 元素相组合,更让人称奇的是,你甚至可以使三维立方体的所有侧面上都显示视频。继续发挥你的想像力,你可以让它们动起来,比如3D旋转,拖动或缩放某一侧面,或是做出你要的效果。在这个世界里,你可以真正做到“人有多大胆,地有多大产”。
(5)动画:WPF 提供动态显示绝大部分用户界面的内置支持。例如,放大和缩小矩形、更改按钮大小。与Adobe Flash中时间线类似,你还可以定义包含时间线的情节提要,也可以调整动画的发生顺序。
(6)数据绑定:基于多数程序都需要显示数据,因此,WPF提供将数据映射到用户界面元素的自动支持功能。类似asp.net的方式, WPF 可为包含在对象和其他源中的信息提供数据绑定,而且还允许在显示数据前对其进行排序和筛选。
最后,可让原有图形图像的重复利用,使你原有的投资发挥最大的效益。
由于XAML基于XML,它的格式是开放的。因此市面上出现了大量有用的转换工具,利用这些工具,可以将你原来在其他设计软件(如Photoshop、Illustrator、AffectEffects,其他三维设计软件等)制作出来的图形图像、3D动画等导出为XAML。
3.针尖对麦芒——WPF给Adobe带来的挑战
不是冤家不聚头。看来,这次微软与Adobe,是有一场或明或暗的较量了。
微软大举拥军进入UI领域,欲与Adobe一决雌雄?这有可能。微软的野心,谁也看不透。是不是世界本来很多路,走的人多了,就没路可走了呢?总之,这种短兵相接的竞争,对广大用户而言,总是利好。
这个我们先不管,让我们来看看微软的Expression系列产品,然后再看看对WPF的影响因素。
微软与Adobe在UI领域的产品线比较
(1)图形图像设计类:Expression Designer。
插画与图形设计工具,可让你设计赏心悦目的网页及应用程序窗口介面,此工具也可用在WPF程序上,类似Adobe的illustrator设计软件。
(2)网页设计类:Expression Web。
网页设计工具,与Adobe的Dreamweaver类似,虽不能直接开发WPF程序,但与VS2005或VS2008相结合,可开发出完美的WPF程序了。
(3)动画设计类:Expression Blend。
专门用来建立互动式桌面应用程序及SilverLight网页互动式工具。类似Adobe的Flash。
最后还是介绍一下,Expression Studio家族的新丁:Expression Media。
它是由之前的iView MediaPro演变而来。可以说其是一个“物件管理工具”,包括了一个用于跟踪如图片、字体、音/视频等数字媒体的可视化目录,能够将矢量图形、位图、3D内容、视频、音频和富文本合成到一起,三维视图能够自由地混合在其他2D和媒体元素之间,允许在一个设计作品的不同元素之间进行功能强大的可视化交互;亦可添加3D图形与动画,并能对加入的3D对象进行直接控制,如XYZ坐标变换、3D照相机、表面材质、Z空间动画以及表面纹理贴图等;也可从主流第三方3D创作工具中导入复杂的几何图形,还能够制作高质量交互式视频,包括 HD视频。它还支持众多第三方软件,这些软件可以用于Windows Media编码、编辑、内容管理、数字版权管理等。
影响因素
WPF与Expression是不是能分得Adobe设计领域的这块大蛋糕,还有许多因素:
(1)微软推广WPF和Expression系列产品的决心。
(2)WPF与Vista操作系统的普及密切相关。未来几年Vista的市场占有率是WPF能否真正成功的关键。任何产品的市场普及都是需要时间的,就象之前Windows系列产品的升级换代一样。预计一两年之后会有激战加苦战,同时,Flash与WPF将并存相当长的一段时间。毕竟,这是Adobe苦心经营多年的市场。拥有大量忠实用户,这一点从Photoshop图书市场的火爆可见一斑。
(3)Expression工具是否好用。
(4)价格因素。
(5)在未来市场能否逐渐成为标准。毕竟Flash的SWF格式已在90%以上的浏览器中安装。
不得不承认,作为设计领域多年的霸主,Adobe的实力三年内暂时是无法撼动的。微软对这方面的希望也是寄与未来的操作系统和开发工具,从目前的情况来看,微软推出的绝大多数设计类产品,都是针对程序开发相关人员的。不过,在微软步步进逼的同时,Adobe一定会还以颜色。试想当有人把刀架到你脖子上,让你就范时,是人都会反击,何况是设计巨无霸Adobe? Adobe推出的Flash(Flex、Apollo)平台正在向application领域稳步前进,并且和开源开发工具Eclipse愈走愈近,以便能与微软Visual Studio打擂台。因此,微软还有相当长的路要走。但随着微软的大举进攻,加之其拥有自己操作系统的优势,多年之后,微软与Adobe,谁将争霸天下?我们拭目以待。
对用户来讲,竞争是有益的。既然暴风雨一定要来,就让它来得更猛烈些吧。不经历风雨,怎么见彩虹?
微软加油,Adobe加油!
4.哪些人应该关注WPF
(1)Net Windows Forms开发人员。
在.net 1.0, 1.1或2.0中开发过Windows Forms应用程序的程序员们深有体会,如果需要制作漂亮的界面,我们不得不使用GDI+编写大量自定义控件,里面涉及纷繁复杂的图形绘制,其中的大量的绘制API可能曾让你头痛不已。恭喜你,当你使用WPF来完成这些任务时,一切变得轻轻松松。当然,如果你是GDI+方面的高手,你仍然可以定制你的控件。
(2)使用Win32及MFC开发者。
Win32及MFC开发者也会遇到程序界面绘制的问题,有时为了满足用户“美的享受”,你是否曾经为诸多的类库,复杂的绘制算法而费尽脑细胞?它们是不是让你付出过高昂的时间和精力代价?在WPF里,“一切尽在掌握中”。
(3)图形图像开发人员。
如果你是图形图像开发人员,那么,请留意了!如果你还在为各种2D,3D的图形图像算法而潜心专研时,人家初学者使用WPF,可能轻轻一点,出来的效果已超过你多天冥思苦想的结果。
(4)网站程序开发人员。
知道XBAP吗?知道SilverLight吗?如果不知道,请多关注它们,否则,一年半载之后,你会发现,你落伍了!
(5)平面设计人员、Flash开发者。
众所周知,Photoshop可以做出炫彩夺目的图片效果,FLASH动感十足。而号称Flash杀手的SilverLight (“银光”,最终微软将中文字定为什么,不得而知。我倒认为中文名字应该叫“炫光”,我这里还是缘用大多数人的说法吧)一登场, 就引起了无数设计者的目光。它是不是真的Flash Killer?银光闪现,“闪客”们如何应对?
WPF带来Vista酷炫的视觉感受的时候,作为设计爱好者的你,还坐得住吗?
了解越多,理解越深,最终答案由你自己来回答吧。
5.结语
随着WPF,Apollo(现名曰:“AIR”)等RIA技术的发展,XHTML + CSS + JavaScript,甚至AJAX这一代技术走下坡路的日子,已经为期不远了。微软、Adobe关于图形图像、网络动画等的竞争如箭在弦,新一代技术带给用户的体验是实实在在的。也许今年局面还不至于有巨大变化,但时间踏入2008年时,在WPF、Flash(AIR)等RIA技术的夹攻之下,桌面应用程序与WEB应用程序的界限会越来越模糊,随着时间的推移,越来越多的Web应用将同时部署传统Web页面和新的RIA UI。此消彼长,几年之后RIA应用将成为主流。