详解Silverlight和WPF互相扩展2011-04-13 51CTO 译:黄永兵1.更适合WPF或Silverlight的场景WPF被设计为创建Windows桌面应用程序,具有 访问富用户界面特征,如动画、3D图形、音频和视频,以及直接访问图 形加速硬件以实现更 好的图形性能。由于大部分WPF应用程序是在计算机本地运行,因此不会涉及到象Web应用程 序那样 的安全限制,因此,如果对文件系统有访问限制的话,WPF应用程序可以只在用户计 算机上存储少量的数据,同样,由于 应用程序不用从远程计算机上下载,这非常适合 Microsoft .NET® Framework,可以不用包括创建它时的所有完整特性。Silverlight 被设计为比WPF更广阔的扩展,因为它支持多平台,截至目前,它不仅 支持Windows,还支持Mac,Novel 和Linux(Moonlight – 目前和Silverlight 1.0 相当,等价于Silverlight 2.0的版本目前也正在开发中 )。然而,为了实现这个 伟大的目标,Silverlight 必须要能够在各种浏览器及不同操作系统环境下能够运行,这需 要在 Silverlight 上增加一些结构性限制,因为在不同系统下对硬件驱动的方式可能不一样 ,如Windows下的Direct X®和 Windows显示驱动模型,它们在Mac和Linux上就没有。接下来就是Silverlight 在浏览器中的插件的大小了,微软被要求省略掉.NET Framework中许多特性,否则插件过大 ,其中很多特性又不常用,对用户而言用处不大,这 会影响用户的下载积极性,正是由于这个限制,Silverlight 短期 内还做不到WPF那么丰富 的功能。在选择哪种技术更适合项目时,如果考虑图形加速,或那些只有WPF中才有 的特性,或者对性能要求很高时,那选择 WPF是最恰当的,相反,如果你对性能要求不是太 高,同时又想将应用扩展到Mac和Linux平台时,那只有选择 Silverlight 了。2.既适合WPF又适合Silverlight的场景最开始在WPF下开发的Windows客户端应用程序可能会扩展到Mac或Linux平台上运行,例如 ,当WPF引入时,我创建了 一个XBAP应用程序(XAML浏览器应用程序),它包括了我2006年 在塞内加尔旅游时拍摄的照片,不幸的是,由于我们的 朋友没有安装.NET Framework,因此 在它的电脑上不能看到这些照片,通过将这个程序转换成Silverlight,我的朋友或 那些不 想安装.NET Framework的人都可以轻松看到这些照片了。在Mike Tucker的博客站点上有一篇很有趣的文章,讲的是最初是由Silverlight 创建应 用程序,然后又转换到WPF应 用程序的例子,Tucker在寻找一种方法来调整它的Silverlight 程序性能,但他没有找到这样的工具,于是决定创建一 个等价的WPF程序。Caliburn是一个应用程序框架,它被设计用来帮助开发人员实现不同的模型,如MVC,MVP ,Presentation模型(MVVM ),命令和应用程序控制器就是一个同时使用了Silverlight 和 WPF开发的程序示例,与此类似,开发人员也想使用这两 种技术创建自己定制的控制器。3.WPF和Silverlight 特性对比由于Silverlight 是WPF的一个大子集,Silverlight 有些特性WPF没有,而且它们共同的 技术特性其实现形式也有所 不同,Vertigo Software的Christopher Vigna允许我们使用下 面的简图来说明这一点。

图- 1 WPF和Silverlight 对比图(2009年二月)特性集包括依赖属性、风格和可视化树是两者共同的特性,但实现方式却不一样网络上不缺乏对这两种技术进行对比的博客文章和论坛讨论主题,但由于这两个技术都处 于不停的发展阶段,因此, 如果从博客文章去收集整理它们之间的不同之处显得非常不可靠 ,因为你看到的博客文章可能已经过时了,如果非要说 的话,那MSDN在线帮助文件可能要算 最权威的了,但它也有过期的那一天,尽管如此,它在检查WPF和Silverlight 当前 的不同 之处时还是非常有用的,它不仅说明了在编程时如何处理它们,还对未来这两者之间可能合 并的功能进行了阐述 。