WPF vs Silverlight

可能重复:
WPF和Silverlight应用程序有什么区别?

WPF和Silverlight有什么区别?

这是一个非常广泛的问题。 我的公司最近写了一份白皮书,概述了两种技术之间的差异,大约有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发布或提供更多的用户控件; 尽pipe通过Silverlight工具包和即将发布的Silverlight 3可以缓解这种差异。

  4. WPF支持3种types的路由事件(直接,冒泡和隧道)。 Silverlight只支持直接和冒泡。

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

  6. Silveright不支持MultiBinding。

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

  8. Silverlight只能进行asynchronousnetworking调用。 WPF可以访问完整的.Netnetworking堆栈,并可以进行任何types的调用。 此外,目前,Silverlight支持SOAP,但不能本地处理SOAP错误exception(这可能会在Silverlight 3中更改)。

  9. 密码学有很大的不同(Silverlight在命名空间中有20个类,而WPF有107个)。 基本上,Silverlight只支持4种哈希algorithm和AESencryption协议。

  10. Silverlight还不支持:Windows桌面的指挥,validation,打印,XPS文档,语音,3D,Freezable对象或InterOp; 所有这些都在WPF中可用。

  11. Silverlight支持浏览器互操作,更多媒体stream选项,包括时间线标记和Deep Zoom。 WPF不支持这些function呢。

这是不完整的,因为我试图把一个70页的文件缩减为点。

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

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

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

尽pipeWPF和Silverlight提供的function(就用户界面组件和对XAML的支持而言)有相似之处,但Silverlight是一个非常小的框架,包含WPFfunction的一个子集。 较新版本的Silverlight实际上包含了WPF中找不到的一些function,所以它不再是一个真正的子集。

WPF有Silverlight没有的东西:基于DirectX的全3D引擎,Windows集成(如Windows 7任务栏缩略图和系统registry可用性),以及访问完整的.NET Framework(包括Oracle数据库支持)。 此外,SL运行在安全的沙箱中,防止访问诸如整个文件系统等WPF应用程序可以完全信任并完全访问系统的情况。

如上所述,SL率先推出了一些技术,比如VisualStateManager,通过微软支持的WPF工具包,将它们二次转化为WPF。

如果你正在考虑哪种技术适合你的项目,这里有一个简单的方法来看看它:如果你正在编写一个应用程序,该应用程序可以在与networking断开的情况下运行,或者如果你正在编写一个需要的应用程序访问Windows特定的function,如上面列出的WPF是要走的路。 对于平台不可知的,启用Web的应用程序Silverlight是一个合适的select。 心连心。

你可以说这与Flex和Adobe Air的区别大致相似,但这有些误导。

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

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

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