WPF应用程序好还是Form应用程序好?

 

WPF应用程序好还是Form应用程序好?

微软公司意识到,我们需要一些崭新的东西来摆脱GDI+和USER的限制,并且它必须是一种生产效率很高的产品,就像Windows Forms那样。WPF就是答案,它是专门为那些想创造现代的用户体验,但又不想掌握好几种较难技术的软件开发人员和图形设计人员设计的。虽然用“Presentation”这个术语来指代我所说的用户界面听来有些太高级了,但其实它很可能更适合用来描述我们期望当今的应用程序应具有的更高级的可视化光滑效果,和在WPF中包括的更广泛的功能。

下面是WPF的一些亮点:

l    广泛整合——在WPF出现之前,Windows开发人员若需要在普通的2D图形和控件之外再使用3D、视频、语音、富文档视图技术,就不得不学习一些独立技术,这些技术之间通常存在许多不一致,而且是在没有多少内建支持的情况下组合运用它们。而WPF通过统一的编程模型和紧密整合涵盖了所有这些部分,在紧密整合下,各种媒体类型都能组合起来并一起呈现。你可以在不同媒体类型上应用一致的效果,你所学的某个领域中的许多技术可以应用在任何其他领域。

l   

WPF内容

放大区域

与分辨率无关——想象这样一个世界,在这里切换到高分辨率设置时并不意味着什么东西都变小了,而是让图形和文本的显示更清晰!试想,用户界面在轻巧的Ultra-Mobile PC的屏幕上和在50英寸的电视机上都能很好地显示。WPF让这一切变得简单,允许你缩小或者放大屏幕上的元素,却不需要考虑屏幕的分辨率,因为WPF使用矢量图形,使许多这方面的需求变为可能。这个改变很容易在Windows Vista放大镜应用程序中看到,放大镜程序天生就支持WPF矢量图形。图1-1展示了在Microsoft Expression的一个对话框上使用放大镜的效果,对话框中有一半内容是用WPF实现的,另一半则不是。注意:两个WPF按钮平滑的缩放与非WPF combobox控件和选项卡控件边框(甚至还有鼠标指针)的带锯齿的放大形成了鲜明对比!

Windows Vista放大镜

非WPF内容

图1-1 基于矢量的WPF内容漂亮地在Windows Vista放大镜程序中缩放

l    硬件加速——虽然WPF是项新技术,但是它是基于Direct3D创建的。特别要注意的是,在WPF应用程序中无论是2D还是3D的图形或者文字内容都会被转换为3D三角形、材质和其他Direct3D对象,并由硬件负责渲染。这意味着WPF应用程序与基于GDI的系统不同,它们可以从硬件加速中获得好处,从而获得更平滑的图像和更好的性能(因为工作全部是由图形处理单元[graphics processing units,GPU]完成的,而不是由中央处理单元[CPU]完成)。它还允许每个WPF应用程序(不仅仅是高端游戏)都可以从新的硬件和驱动中获得最大的好处,因为这些硬件和驱动的发展主要集中在3D处理能力上。但是WPF并不必需高端图形硬件,它也有自己的软件渲染管道。因此它不但可以使用硬件尚不支持的特性,可以高保真地打印屏幕上的任何内容,而且当遇到硬件资源不足(例如只有一块较老的图形卡,甚至是有一块高端图形卡但却没有足够的GPU资源,如缺少显存)时还可以作为备用。

l    声明式编程——20多年来,Win16/Win32程序都用声明式资源脚本来定义对话框和菜单的布局。虽然Windows Forms没有内建对声明式用户界面定义的支持,但所有类型的.NET程序通常是利用声明式定制属性和基于XML的配置和资源文件。但是WPF通过引入XAML(可扩展应用程序标记语言,Extensible Application Markup Language,读音为Zammel)将声明式编程带入下一个层次。WPF和XAML的组合十分类似于使用HTML定义一个用户界面,但却具有令人吃惊的表示能力。这种表示能力甚至超越了用户界面的范畴,WPF可以将XAML作为一种文档格式、一种3D模型表示,等等。结果是图形设计师可以把大部分精力直接投入到应用程序的界面外观上,还可以把一些精力放到一些通常要编写代码来完成的行为上。下一章将深入讲解XAML。

l    富创作和定制(Rich composition and customization)——WPF控件具有你从没见过的创作能力。你可以将一些动画按钮放入一个ComboBox控件中,或者将一些视频剪辑放入一个菜单中!虽然这些特别的定制可能听起来十分恐怖,但是你不需要写多少代码(甚至不要任何代码),就能以用控件开发者们从来没有想到过的方式自定义控件(并不像以前控件技术中的自绘(owner-draw))。用同样的方法,WPF使创建完全不同外观的“皮肤”应用程序变得十分简单(将在第10章中讲解)。

l    易于部署——WPF为(使用Windows Installer或ClickOnce)部署传统Windows应用程序或在Web浏览器中宿主应用程序提供了选择。虽然WPF中部署方面的大部分支持并不新颖(这些选项也可以在Windows Forms中找到),但它仍然是WPF重要的技术组件。WPF的一个新且有趣的方面是它构建在ClickOnce之上,为与Web浏览器及其导航系统的直接整合提供了支持(将在第7章中讲解)。

一句话,WPF的目的是集众家之所长,将各系统的最佳特性组合起来,如DirectX的3D和硬件加速、Windows Forms的开发人员生产效率,Adobe Flash强大的动画支持,HTML的声明式标记和易于部署。WPF的第一个版本很好地实现了这一目标,尽管它不是很完美。你可能要遇到一些性能问题(例如较长的启动时间或者一些可视效果不能进行硬件加速)或者一些方面的特性集并没有你想要的那么完整(如3D、音频和视频)。但是通过本书的学习,你会发现WPF比你以前用过的任何技术带给了你更多的生产力、能量和乐趣。

WPF是否允许我做一些以前不能做的事?

严格地说,答案是否定的,这就像C#和.NET Framework无法让你做什么不能用汇编代码完成的事情一样。这其实是在问,为获得想要的结果,你愿意费多大力气!

如果你试图在没有WPF的情况下构建一个等同于WPF的应用程序,你不仅仅要为在屏幕上绘制像素或与输入设备交互担忧,还需要做太多太多的额外工作来实现WPF中内建的可访问性(accessibility)和本地化(localization),以及WPF中内建的对于远程桌面的特别处理(这样远程应用程序才能够在客户端呈现出来,并可以避免许多性能问题),等等。注意,优化的远程桌面体验,只有当服务器运行在Windows Vista或者之后版本的系统上才可以实现,且客户端必须安装WPF。

因此,我认为大多数人将会认同,考虑到时间和成本,上述问题的答案是肯定的。

何时我该使用WPF而不是DirectX ?(DirectX已死了吗?)

DirectX其实并没有死去,它比WPF更加适合高级开发人员硬碰硬地编写“快速反应游戏”或者有复杂3D模型的应用程序,这些场合要求性能最大化。也就是说,写一个非托管DirectX应用程序比较简单,但是与一个相似的WPF应用程序比起来性能要差很多。

DirextX是图形硬件的底层接口,无论你的电脑使用哪种GPU,它都提供了与之相关的所有可能的功能。DirectX可以视作图形世界的集成语言:你可以做任何GPU支持的事情,但是作为应用程序的缔造者,你来决定是否支持所有的硬件变化。虽然这有些费劲,但像这样的底层硬件访问,可以让有经验的开发人员自己选择是要细腻地显示质量还是要速度。另外,DirectX无疑提供了最先进的GPU特性,DirectX中的合并比WPF中的要快得多。

相比之下,WPF提供的是上层抽象,它描述了你的场景(scene),只要硬件支持,它就会找出最好的呈现方法。从其内部来说,这可能会用到Shader Model 3.0、固定功能流水线或软件。(如果你对这些术语不熟悉,请不要担心,把它当作你应该使用WPF的征兆就是了!)

选择DirectX而非WPF可能会导致开发成本呈几何级增加。大部分的成本在于对要支持的每一种驱动和GPU的组合需要测试你的应用程序,而选择WPF进行开发的一个主要优点就是微软已经帮你做了这个测试!你可以主要测试低端硬件以评估性能。WPF应用程序甚至可以在远程桌面上或部分受信(partial-trust)环境中利用客户端的GPU,这也是一个很吸引人的特点。

注意,你可以在同一个应用程序中既使用DirectX又使用WPF。第15章将讲解具体做法。

何时我该使用WPF而不是Windows Forms ?(Windows Forms没有用了吗?)

WPF明显更适合于开发具有富媒体(rich media)的应用程序,但是有人曾说过:Windows Forms是传统用户界面的商业应用程序的最佳选择。我认为这个说法是针对WPF测试版的,测试版还缺少许多标准的控件(如TreeView、ListView和OpenFileDialog),也没有可视化的设计器,这使得用WPF开发传统的Windows应用程序比用Windows Forms要难得多。

虽然Windows Forms有一些十分有用的控件(例如DataGridView和PropertyGrid)是WPF所没有的,并且在我编写本书的时候,市场上Windows Forms有更多第三方控件,但WPF却有一些即使对传统用户界面设计而言也是令人激动的特性(如支持分辨率无关性和高级布局)。在第15章中,我将向你展示如何在一个WPF应用程序中使用Windows Forms控件。

因此,除非必须用Windows 98(Windows Forms 2.0仍然支持Windows 98但是WPF不支持),否则我会建议你使用WPF而不是Windows Forms来开发大部分应用程序——特别是在Visual Studio 2008发布以后。但是Windows Forms不会这么快就消失,在2005年2.0版本发布之后,不会再对它做什么重大改进了。很明显,微软正在为WPF铺路(而不是Windows Forms),使它成为未来的呈现平台。

何时我该使用WPF而不是Adobe Flash ?

在创建富网络内容(rich web content)方面,Flash是目前最流行的选择,因为它可以到处运行。你可以很自信地将Flash的内容放在一个网站上,因为绝大部分的访问者都已经安装了必要的播放器。(如果他们没有安装的话,也可以很快就下载下来。)

WPF应用程序也可以在Web浏览器内运行。它的优点在于有更好的开发工具和编程模型、更加丰富的特性、健壮的控件重用性、广泛的编程语言支持,以及对于底层平台的完全访问(如果安全机制允许的话)。但是查看这样的内容需要Windows系统和.NET Framework 3.0(Windows Vista和之后的版本默认安装了.NET Framework 3.0)。

为了实现跨平台支持和到处运行,微软已经发布了Silver light。Silver light是一个小型的、轻量级运行时环境,它是WPF的一个子集。除了支持C#和Visual Basic以外,它还支持XAML和JavaScript,并且最终它将既可以在Windows系统也可以在非Windows系统中运行。在编写本书的时候,WPF/E将考虑支持基于矢量的图形、图像、视频、动画、文本和基本控件,但是它不支持3D、富文档(rich document)、可扩展性和硬件加速。就让我们拭目以待,看WPF或Silver light作为Flash的替代品将会流行到何种程度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值