WPF、XBAP和Silverlight,哪个更适合商业应用?

37

我对完整的WPF客户端应用程序有很多了解。我知道WPF客户端应用程序支持完整的.NET Framework 3.5,允许硬件加速2D和3D图形,主题,模板化,样式化,触发器等功能。

但我不清楚XBAP和Silverlight应用程序的哪些特性或功能存在或缺失。我听说由于安全问题,XBAP在某些方面固有限制,但目前只知此而已。

我知道WPF足够强大,足以在全面的商业应用程序中使用,但是XBAP和Silverlight呢?它们各自存在哪些重要的能力和局限性?它们是否缺少会使其在商业应用程序中无法使用的功能?

4个回答

18

我曾全职从事约18个月的XBAP开发,为一个相当雄心壮志的项目工作,但我非常讨厌它。

有许多未经记录的限制,比如无法设置自定义鼠标指针。微软忘了告诉任何人这个问题和其他一百个问题。由于这个雷区,我现在非常排斥沙箱技术。

再加上部署噩梦(到今天为止,在Firefox中仍然存在问题,即使在3.5 SP1之后也是如此),我真诚地认为微软正在竭尽所能杀死XBAP,以支持Silverlight。 我不怪他们,只是希望他们能更加公开地表达。

我会像瘟疫一样避免XBAP。 它是一个没有未来的死亡场景。 如果它很快被取消,我一点也不会感到惊讶。


8
Silverlight应用程序在WPF应用程序中的WebBrowser控件中运行,并在Firefox浏览器中作为XBAP应用程序托管,这个想法会让你兴奋吗?http://msdn.microsoft.com/en-us/library/cc656722(v=vs.90).aspx - felickz

17

Wintellect撰写了一篇关于Silverlight和WPF的较好比较文章,发布在这里:http://wpfslguidance.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28278

从我在WPF和Silverlight中的个人经验来看,SL完全可以用于LOB应用程序。.NET RIA服务是SL3针对LOB应用程序的一个很好的补充。针对您最后的问题,根据我的经验,没有什么事情会阻碍SL创建LOB应用程序。在此讨论中,WPF和SL之间唯一显著的区别是,SL无法访问客户端计算机上的本地资源(如注册表),也无法访问WPF可以访问的Windows特定功能,例如Windows 7跳列表或库。我认为由于易于部署和能够针对多个平台,Silverlight是业务应用程序的最佳选择。


2012年的回顾:Silverlight 5现在支持受信任应用程序、打印支持和其他有趣的新LOB功能。Silverlight万岁。https://dev59.com/zlzUa4cB1Zd3GeqP1kiv - felickz

12

关于 Silverlight,我将概述我的经验。 (注:重新阅读此内容时,它听起来有些消极,但我指出了缺失的功能。总体而言,我喜欢 Silverlight,使用 c#在浏览器中创建丰富的用户界面吗?非常好)。

值得注意的差异包括没有鼠标右键、鼠标滚轮支持、打印功能,以及您无法打开新窗口。您的 OOB SL 应用程序不能放置在通知区域。您可以使用 JavaScript 处理鼠标事件,但如果要将应用程序移动到 OOB,则无法这样做。

SL 团队似乎过分关注安全问题,甚至到了捆绑其 LOB 适用性的程度(无法打开新窗口,仅信任 OOB 中的本地系统访问设置,通知区域等)。

其中一些使 Silverlight 应用程序感觉不兼容 Windows。请考虑高亮文本、右键复制。或者右键粘贴。这些许多人使用的基本操作都不见了。它还感觉像是一个外星 UI 体验,例如,您本能地想用鼠标滚轮滚动网格,但它不起作用。这些东西在浏览器的任何表格中都可以工作,但在 SL 中却行不通。

就编程而言,我没有太多使用 WPF 的经验,但据我所知,您必须以不同的方式解决某些问题。

SL 中缺少标记扩展。它还只有整数索引绑定,因此没有属性包,除非进行一些技巧。 没有触发器,因此您始终必须编写代码来连接事件(在更动态的页面中很烦人)。除了工具包中的 ImplicitStyleManager 之外,它没有可继承的样式。

因此,对于某些 LOB 应用程序来说,它很好,但对于其他应用程序,则需要跨越一些障碍(例如,如果您希望为客户端进行自定义)。但它肯定不适用于所有 LOB 应用程序。

我的印象是Silverlight似乎还没有完全成熟,存在很多小问题。例如,数据网格有些令人沮丧(不会自动拉伸,很难进行子类化),自动完成框有些不稳定,导航框架有些笨重,组合框/树形视图很难绑定(如果你想将SelectedItem绑定到不同于itemsSource的对象中,他们确实还没有解决这个问题)。

总的来说,Silverlight已经接近完美,只要你能接受一些限制和小问题。


SL3具有本地样式继承、触发器和行为,类似于WPF。对于不支持打印的应用程序来说,这是一个令人失望的问题。关于系统托盘/鼠标事件(除了滚轮,我想要)还没有决定——因为SL也可以在Mac上运行。(尽管大多数Web用户都是Windows用户。) - Ben M
是啊,我明白他们这样做的原因,但我仍然感到困惑,为什么他们要摆脱基本的Windows文本框右键菜单。就好像他们不知道它在哪个平台上运行一样!似乎他们偷偷地引入了这些行为,没有出现在SL3 Beta中。看起来不错!我也喜欢混合支持。通过隐式样式,我希望所有子元素都可以根据父元素的样式选择样式。我看不到任何东西可以让这种情况发生?基于 BasedOn 的东西允许你聚合,但并不是隐式样式。虽然我承认我还没有仔细研究过 :) - mattmanser
你的意思是通过为Button设置样式,所有Button的派生类都会自动继承它吗?如果确实如此,我同意这将是一个很好的默认功能。 - Ben M
ComponentOne有一个右键上下文菜单扩展,非常好用。它在他们的富文本组件中表现良好,给你一种非常“Windows”UI的感觉。 - Alex

9
我没有使用XBAP的经验,但我的印象与你类似,与WPF相比,它只在安全性方面受到限制。
至于Silverlight:我最近使用它开发了一个复杂的农业遥测监控用户界面——它更像是一个数据可视化应用程序,而不是传统的业务应用程序,但它有大量的CRUD操作,并且由于技术选择,我没有一个想要实现但无法实现的功能。而这还是SL2版本。
如果你能保证你的用户正在运行.NET 3.5(或者XBAP是否也属于3.0?),那么我相信你会得到更多的花哨功能,我建议你选择XBAP。否则,我毫不犹豫地推荐Silverlight。
(如果你想要更多的功能比较矩阵,我很抱歉——但我认为你可以在微软公司找到这些。)

不用道歉,回答很好!谢谢! - Mark Carpenter

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