WPF是开发商业用户界面的好选择吗?

8
我们正在讨论未来的Windows UI开发应该使用WinForms还是WPF。你们中有些人是如何做出这个决定的?我们大部分应用程序都是LOB应用程序,我不确定对于这些类型的应用程序是否存在明显和压倒性的WPF优势。然而,我的WPF知识有限。我也有点担心WPF会流行几年,然后微软就会厌倦它并推出其他东西。我想反驳这一观点的一个论点是Visual Studio 2010是一个WPF应用程序。

谢谢。


4
我也有些担心 WPF 会流行几年,然后微软就对它失去兴趣了。另一方面,微软已经对 Windows Forms 不再感兴趣了。 - itowlson
1
@itowlson - 没问题。我真的很喜欢SO,但这里有些人需要过好自己的生活。为什么这里的人们总是那么迅速地关闭问题?你投票关闭一个问题时会得到积分吗?我不明白。 - Randy Minder
11个回答

14

这里需要考虑很多因素。

不选择WPF的原因:

  • 目前它对于常见的LOB控件(例如日期选择器、数字输入小部件等)的支持较WinForms少,尽管通过WPF Toolkit、WPF 4和第三方控件供应商的改进,这一点正在改善。
  • 工具无法与Windows Forms设计师的工具相媲美。 (虽然公平地说,这部分原因是因为工具必须应对更复杂的构建视图的方式。而Blend肯定会到达那里。)
  • 与Windows Forms有非常不同的思维模型。要真正从WPF中获得好处,您需要以与您所习惯的非常不同的方式思考。因此,可能会有一个很大的学习曲线-不仅在学习技术方面,还要在内部吸收惯用法和模式方面(尽管现在有比以前更多的社区资源可用于习惯性WPF)。

选择WPF的原因:

  • 良好的架构支持。如果使用正确,WPF具有良好的代码和UI分离功能,使WPF应用程序更易于测试和演变。
  • 更高的灵活性。例如,如果您需要一个简单的地图显示,可以从ListBox中构建它,并在几个小时内完成,而不必研究和购买第三方组件或从头开始编写地图控件。对于WPF来说,简单的数据可视化是一个致命的功能。
  • WinForms已经走到了尽头。它将不会看到任何Microsoft的增强,而控件供应商正在将重心转向WPF,因为WinForms市场已经饱和。
  • 大部分WPF经验都可以移植到Silverlight上,这(a)使您能够灵活地将您的应用程序带到浏览器和手机上,(b)给您额外的信心,即使他们已经“厌倦” WPF,他们也表现出非常强烈的承诺与Silverlight保持一致。

个人而言,如果我现在要开始编写 Windows 桌面应用程序,我会选择 WPF。不过,我已经攀过了学习曲线。对于一个没有 WPF 经验的团队来说,接受它的成本必须比我高。


不确定您所说的工具是什么,但除此之外我同意。 - C. Dragon 76
我在想的是Visual Studio WPF设计器,我觉得它很慢、功能有限且经常出现错误,以至于我总是手工编写XAML而不是与其局限性作斗争。相比之下,WinForms设计器经过8年左右的战斗历练,并拥有智能标记、自定义动词等有用技术的武库。话虽如此,如果您使用Blend和/或第三方工具,情况会好得多。听起来你的经验和我的不同,所以没关系,也许我太苛刻了......! - itowlson
4
几个月前,我关闭了VS WPF设计工具,因为它实在太糟糕了。但实际上,我的UI设计和构建能力并没有受到太大影响。 - Robert Rossney
1
除非VS设计师和Blend一样好,否则我甚至没有使用过设计师创建一个视图,也永远不会这样做。 - krishna

11

需要记住的一件事是Silverlight。未来你是否可能希望编写能够从浏览器或甚至Windows Phone 7设备上运行应用程序呢?虽然Silverlight和WPF并不完全相同,但它们非常相似。这将是我支持WPF的主要“未来保障”论点。

个人喜欢WPF的组合模型-以及声明性UI表示方式和比WinForms更好的布局系统。尽管我并不是一个UI专家。


@Jon - 我考虑过Silverlight,但对我们来说,在浏览器上编写没有任何真正的好处。 - Randy Minder
对于表示用户界面的声明式方式,我非常喜欢。对我来说,这是超越WinForms的最大进步,以至于我真的不喜欢再次在WinForms中工作。 - Alastair Pitts

5
WPF对我来说是一个改变游戏规则的技术。我的公司旗舰应用程序是一个WinForms程序,其UI从元数据动态构建。花了大约六个月的时间,才使UI稳定,并且还不够漂亮。由于UI代码与数据模型代码相互交织,所以仍然存在一些我无法修复的错误。现在,该系统已经运行了一年左右,客户向我提出了请求,例如:“我们想通过拖放重新排列此屏幕上的信息”,“我们可以将此部分的信息显示在网格中吗?”和 - 我最喜欢的 - “我们可以得到拼写检查和自动文本吗?”这些请求被放入一个越来越长的待办事项列表中。我花了相当多的时间来研究如何重构应用程序的设计,以便支持WPF UI。一旦我做到了,结果非常惊人。代码更简单了。要调试的逻辑更少了。UI中的所有内容都更快了,这很重要,因为这是桌面应用程序的原因之一,我们需要非常响应的UI。我的程序可以创建成千上万的UI控件,而我不必担心窗口句柄。我能够轻松地改变程序的外观和感觉,这令人惊叹。例如:UI使用各种模板呈现DataRow。由于给定屏幕上可能有数十行,并且光标比较小,因此用户能够一眼看出光标所在的行是很有用的。我只花了十分钟实现了样式,现在这个视觉效果在我的应用程序中随处可见。这比我想要将其添加到WinForms应用程序中所需的时间还要短。当然,如果不能通过添加两个样式来完成它,那么需要更长的时间。WPF并不是魔法。
有缺点吗?正如Palin女士所说,当然有。浏览一下我在SO上提出的一些问题-关于如何通过一个无操作值转换器改变数据绑定行为的问题是一个很好的例子。整个同时调试绑定的方法非常令人沮丧,特别是因为很容易出现绑定错误而不知道。 (我现在始终将输出窗口保持在屏幕上,以便在测试时如果有任何绑定错误,日志消息的移动会引起我的注意。)如果您的窗口抛出XamlParseException,那么能够获得真正的堆栈跟踪就太好了。不要让我说下去,我可以一直说到天亮。
还有工具!对于构建WPF UI的Visual Studio可视化工具对我来说完全没用。我有Blend,并且使用它重新设计了控件的模板,但总体而言,我发现使用Blend就像试图在充满轮毂盖和捆扎线的沼泽中慢跑。我相信如果你只知道Blend,它真的很棒,但如果你首先学习的是WPF对象模型和XAML,那么Blend的行为就相当神秘。Visual Studio和Kaxaml中的XML编辑器让我感到沮丧,而Resharper的WPF功能则可以说是一个正在进行中的工作。我更喜欢WinForms的工具,这些工具使我能够流畅地、快速地构建缓慢、古怪、难以维护的代码堆。

1

WPF看起来将取代Winforms,至少在Windows Mobile设备上是这样,未来的开发重点将集中在Silverlight(WPF的衍生版本)和XNA上。

在一个开放的市场中,如果你想保持自己对更广泛的招聘市场有吸引力,涉及WPF是有意义的。


1

我自己也曾经想过这个问题。但是,正如你所说,VS2010大量使用WPF,这表明微软正在告诉世界,它不仅仅是另一个MS时尚,而且将在未来一段时间内继续存在。


1

我认为微软正在传递一个明确的信息,即WPF和Silverlight是现在和未来。Winforms PM也这样说过。此外,预计WPF和Silverlight将在未来融合。

大约6个月前,在我的办公室里我们也经历了同样的困境。我们正在开发一个大型LOB应用程序,团队中没有人有很多关于WPF或Winforms的经验。在这种情况下,我们找不到足够的理由选择Winforms,而且我们觉得WPF提供了更清晰的关注点分离。我们决定使用WPF并使用PRISM作为应用程序框架。6个月后,我认为我们做出了正确的选择。


1
@Daniel,我很好奇你为什么认为你做出了正确的选择。你从采用WPF中看到了哪些实际的好处? - Randy Minder
1
让我换个方式来说 - 我们不后悔我们的决定。我们的应用程序没有任何东西是我们不能用Winforms完成的,但我认为我们的设计更加清晰,主要是由于WPF中的数据绑定。在WPF中构建具有动态内容区域的屏幕要容易得多。MVVM对我们来说是一个巨大的胜利,ClickOnce部署也是如此。此外,我觉得如果我们需要使用Silverlight交付某些东西,我们正在学习一些将会产生回报的技能。 - Daniel Auger

1

对于编程方面,我深知WPF是未来的趋势。Windows Forms存在许多难以解决的痛点,例如数据绑定等,并且仅仅是.NET上的一层薄膜。当我不得不调试BindingSource等类时,它吓坏了我。现在,我不知道WPF类内部的情况如何,但微软肯定已经在2001年至2006年之间学到了一些东西。

我喜欢WPF的原因是

  • 样式
  • 数据模板
  • 卓越和一流的数据绑定支持
  • 声明性UI设置
  • 附加属性
  • ...

我只希望微软将更多地使用这种UI技术,在内部减少与性能相关的弱点。WPF要求相当高。在VS2010中,我希望看到设计师展示UI的强大功能(Beta版中的XML Schema设计师已经非常有用)。我认为像MS Word这样的应用程序可以从WPF的所有转换功能中受益匪浅。


功能清单很好,对LOB开发人员具有实际价值。与WinForms相比,项控件中的数据模板是一个改变游戏规则的因素。 - itowlson

1

WPF是创建应用程序的伟大框架。当您将其与良好的GUI架构(如MVC、MVP或MVVM)相结合时,它非常擅长制作比标准WinForms应用程序更具吸引力的业务应用程序。

另一方面,XAML是随WPF而来的丑陋表亲。 XAML的主要问题在于工具。这些工具比不存在还糟糕,因为它们让人们认为有一个类似WinForms的WPF设计师,而实际上,我认识的大多数开发人员都使用等同于记事本的东西来开发他们的XAML。

XAML的另一个工具问题是编译器。 XAML仅略好于魔术字符串。编译器无法捕捉到您在XAML中犯的大多数错误,有些错误甚至不会使您的应用程序崩溃。相反,WPF将向您的输出打印错误消息并继续运行。


0

考虑到他们基本上放弃了Windows Mobile,转而使用仅使用WPF和XNA作为其主要UI层的Windows Phone 7,我不得不说是的。人们甚至可以将此举视为更广泛部署的Windows操作系统的实验。此外,大多数用户都喜欢简化的华丽界面,这是我的个人看法。


0
关于工具问题,我承认在Visual Studio 2008的设计师中构建WPF和Silverlight应用程序需要相当多的专业知识才能做到正确。但是,我希望您能看一下Visual Studio 2010中改进的设计师 - 它有更多功能,我们希望这些功能对于Windows Forms开发人员来说,在构建商业表单时无论是在Silverlight还是WPF中都会更加实用。
请查看以下视频: 数据绑定和表单工具 样式工具 未来 Beta 2中的新功能 并在此处获取发布候选版
团队有了一篇新博客here
我希望您会发现这些信息很有用——如果您已经尝试过Visual Studio 2010,我很想听听您的反馈。请发送邮件至mwthomas@microsoft.com.
谢谢, Mark Wilson-Thomas, WPF和Silverlight设计师、Visual Studio程序经理。

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