WPF与Silverlight

时间:2009-06-03 13:00:40

标签: wpf silverlight

  

可能重复:
  What is the difference between WPF and Silverlight application?

WPF和Silverlight之间的确切区别是什么?

4 个答案:

答案 0 :(得分:204)

这是一个非常广泛的问题。我公司最近写了一份白皮书,概述了这两种技术之间的差异,大约有70页。不幸的是,它尚未发布,或者我会给你链接。

  

编辑:正如所承诺的,这是链接   关于Codeplex的白皮书:

  http://wpfslguidance.codeplex.com/   

但是,我会试着总结一下。

  1. WPF是一个厚厚的Windows客户端平台,可以访问完整的.Net Framework。 Silverlight是一种基于浏览器的技术,可以访问.Net Framework的一个子集(称为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默认为OneWay数据绑定,而WPF使用依赖项属性指定的默认模式。

  6. Silveright不支持MultiBinding。

  7. Silverlight支持XmlDataProvider,但不支持ObjectDataProvider。 WPF支持两者。

  8. Silverlight只能进行异步网络调用。 WPF可以访问完整的.Net网络堆栈,可以进行任何类型的调用。此外,目前,Silverlight支持SOAP,但本身无法处理SOAP错误异常(这可能会在Silverlight 3中发生变化)。

  9. 密码学存在巨大差异(Silverlight在命名空间中有20个类,而WPF可以访问107个)。基本上,Silverlight仅支持4种哈希算法和AES加密协议。

  10. Silverlight尚不支持:Windows桌面上的命令,验证,打印,XPS文档,语音,3D,Freezable对象或InterOp;所有这些都可以在WPF中找到。

  11. Silverlight支持浏览器互操作,更多媒体流选项,包括时间轴标记和深度缩放。 WPF尚不支持这些功能。

  12. 这并不完整,因为我试图将70页的文档缩减为要点。

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

答案 1 :(得分:9)

WPF是一种Windows桌面技术,用于在.Net框架中开发Windows应用程序。

Silverlight是一种Web技术,Windows和MAC上的浏览器插件完全支持(与Flash类似)。还有一个用于在Linux(Moonlight)上运行Silverlight的插件。

虽然WPF和Silverlight提供的功能之间存在相似之处(在用户界面组件和对XAML的支持方面),但Silverlight是一个非常小的框架,包含WPF功能的子集。较新版本的Silverlight实际上包含WPF中没有的某些功能,因此它不再是真正的子集。

答案 2 :(得分:3)

WPF拥有Silverlight不具备的功能:基于DirectX的完整3D引擎,Windows集成的Windows 7任务栏缩略图和系统注册表可用性,以及对包括Oracle数据库支持在内的完整.NET Framework的访问。此外,SL在安全的沙箱中运行,防止访问整个文件系统,WPF应用程序可以完全信任并完全访问系统。

如上所述,SL开创了一些技术,例如VisualStateManager,它们通过微软支持的WPF工具包进入WPF。

如果您正在寻找适合您的项目的技术,可以通过以下方式查看它:如果您正在编写一个应用程序,该应用程序在与Web断开连接时运行,或者您正在编写应用程序需要访问上面列出的Windows特定功能,然后WPF是要走的路。对于与平台无关的,支持Web的应用程序Silverlight是一个合适的选择。第h

答案 3 :(得分:1)

你可以说它非常类似于Flex和Adobe Air之间的区别,但这有点误导。

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

许多WPF API可用于Silverlight应用程序。

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