WPF与Silverlight的比较

126

3
Silverlight 已不再受支持,而 WPF 是。 - Paul C
4个回答

205

这是一个非常广泛的问题。我的公司最近撰写了一份白皮书,概述了这两种技术之间的区别,大约有70页。不幸的是,它还没有出版,否则我会给你链接。

  

编辑:如承诺的那样,这是Codeplex上的白皮书链接:

   http://wpfslguidance.codeplex.com/  

然而,我会尝试概括一下。

  1. WPF是一个厚重的Windows客户端平台,可以访问完整的.NET框架。Silverlight是一种基于浏览器的技术,可以访问.NET框架的子集(称为CoreCLR)。因此,您将注意到在框架内使用看似每天都在使用的方法和对象时存在差异。例如,在String类上Split()方法在Silverlight中有3个重载版本,但在.NET Framework中有6个。您会经常遇到这样的差异。

  2. 在WPF中,所有的可视化元素都派生自Visual基类。在Silverlight中,它们不是;相反,它们派生自Control。然而,这两种技术最终都是从DependencyObject类向上派生的。

  3. 目前,WPF提供或可用的用户控件比Silverlight更多;尽管这种差异正在通过Silverlight Toolkit和即将发布的Silverlight 3来缓解。

  4. WPF支持3种类型的路由事件(直接、冒泡和隧道)。Silverlight仅支持直接和冒泡。

  5. 有相当多的数据绑定差异,在Silverlight的下一个版本中将有所缓解。目前,Silverlight不支持绑定模式OneWayToSource或Explict UpdateSourceTriggers。此外,如果没有设置默认模式,Silverlight会默认使用单向数据绑定,而WPF使用依赖属性指定的默认模式。

  6. Silveright不支持MultiBinding。

  • Silverlight支持XmlDataProvider,但不支持ObjectDataProvider。WPF两者都支持。

  • Silverlight只能进行异步网络调用。而WPF可以访问完整的.NET网络堆栈并进行任何类型的调用。此外,目前,Silverlight支持SOAP,但无法本地处理SOAP故障异常(这可能会在Silverlight 3中发生改变)。

  • 加密方面有很大的差异(Silverlight在命名空间中仅拥有20个类,而WPF则可以访问107个)。基本上,Silverlight只支持4种哈希算法和AES加密协议。

  • Silverlight尚不支持:Commanding、Validation、Printing、XPS文档、Speech、3D、Freezable对象或与Windows桌面的Interop;而这些在WPF中都是可用的。

  • Silverlight支持浏览器互操作性,更多的媒体流选项,包括时间线标记和Deep Zoom。WPF尚未支持这些功能。

  • 这绝不是完整的,因为我试图将一个70页的文档缩减成要点。

    最后,即使存在所有这些差异,微软也在努力缩小两种技术之间的差距。Silverlight Toolkit和WPF Toolkit都解决了各自技术的一些缺点。Silverlight 3将添加许多目前不可用的功能(例如元素到元素数据绑定)。然而,由于核心库存在差异,始终会存在一些框架差异。


    非常感谢您的回复。但我认为Silverlight永远不会支持故障。原因是浏览器在将HTTP消息发送到插件(即Silverlight)之前会拦截它。如果HTTP消息有错误代码(例如500),则消息不会传递到插件,并被浏览器丢弃。但SOAP V 1.2规范http://www.w3.org/TR/2007/REC-soap12-part0-20070427/在4.1.2节的结尾简要说明,如果Web服务引发SOAP故障,则HTTP响应头必须返回错误500“内部服务器错误”。 - Nicolas Dorier
    1
    实际上,看起来 Silverlight 3 将会对 SOAP 异常进行包装。请参阅 http://msdn.microsoft.com/en-us/library/dd470096(VS.96).aspx 上的 beta 文档。 - SergioL
    我认为第六条已经过时了 - Silverlight现在支持MultiBinding了吗? - JoeCool
    1
    感谢详细的回答。是否有类似的文档比较 Silverlight 4 和 WPF 4? - Sandeep G B

    9
    WPF是一种Windows桌面技术,用于在.Net框架中开发Windows应用程序。
    Silverlight是一种Web技术,在Windows和MAC上都可以通过浏览器插件完全支持(类似于Flash)。还有一个用于在Linux上运行Silverlight的插件(Moonlight)。
    虽然WPF和Silverlight提供的功能有相似之处(如用户界面组件和对XAML的支持),但Silverlight是一个更小的框架,包含了WPF功能的子集。较新版本的Silverlight实际上包含了一些WPF中没有的功能,因此它不再是真正的子集。

    2
    实际上,WPF中没有的Silverlight功能可以通过WPF Toolkit获得,并将包含在WPF 4中。 - Thomas Levesque
    不幸的是,看起来DeepZoom已经从WPF 4.0中被“削减”了,所以这是一个仍然缺失的Silverlight功能 :-(http://blogs.msdn.com/jaimer/archive/2009/05/27/wpf-4-and-net-framework-4-beta-1-list-of-features-totrack.aspx - Conceptdev

    3
    WPF相较于Silverlight具备以下特点:基于DirectX的完整3D引擎,Windows集成,如Windows 7任务栏缩略图和系统注册表可用性,以及访问完整的.NET框架,包括对Oracle数据库的支持。此外,SL在安全沙箱中运行,防止访问诸如整个文件系统之类的内容,而WPF应用程序可以运行完全受信任并具有完全的系统访问权限。
    正如上面所提到的,SL开创了一些技术,例如VisualStateManager,它们正在通过Microsoft支持的WPF工具包次要地进入WPF。
    如果您正在寻找适合项目的技术,这里有一个简单的方法来看待它:如果您正在编写一个旨在脱机运行的应用程序,或者如果您正在编写一个需要访问上述功能的Windows特定功能的应用程序,则WPF是正确的选择。对于跨平台、启用Web的应用程序,Silverlight是一个适当的选择。希望对您有所帮助。

    1

    你可以说它与Flex和Adobe Air之间的差异非常相似,但这有点误导。

    WPF是指一组技术(通过API公开),.NET Framework 3.0及以上版本的用户可以访问以便在屏幕上绘制。

    许多WPF API也适用于Silverlight应用程序。

    当然,除了WPF之外,Silverlight还提供了许多其他API,因为SL应用程序需要做的不仅仅是在屏幕上绘制。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接