在创建新的图形用户界面时,WPF是否比Windows Forms更受青睐?

47

大多数Windows窗体的限制和技巧对大多数程序员来说都是常见的。但是自从.NET 3.0之后,也可以使用WPF,即Windows Presentation Foundation。据说你可以更轻松地制作“性感应用程序”,并且在.NET 3.5 SP1上执行速度得到了良好的提升。

但是另一方面,很多事情在WPF中运作不同。我不会说它更困难,但你必须从头开始学习“所有”东西。

我的问题是:当你需要创建一个新的GUI,并且项目没有时间压力时,是否值得花费这些额外的时间呢?


WPF和Winforms之间有性能差异吗? - Marklar
4
是的,Winforms 在几乎所有方面都比 Tim 更快。 - Camilo Martin
@Camilo:我认为你的评论是误导性的。对于大多数事情,Winforms的速度大约比WPF快1.2倍。对于一些事情,它的速度是WPF的2倍。另一方面,对于许多事情,WPF实际上比Winforms更快,有时甚至戏剧性地更快(例如动画在WPF中可以轻松快10倍)。但我不知道有任何东西比WPF更快。 - Ray Burns
@Ray 这取决于您的显卡。对于常见控件,渲染矢量图形总是比将位图显示在屏幕上慢。至少我在几个WPF应用程序中看到了显著的性能下降(因为虚拟机没有使用图形卡),但我也可能错了。好处是,一旦掌握了抽象概念,WPF更适合开发人员(我现在就在学习)。此外,CPU每天都在变得更快(或者至少对于多线程代码是这样)。 - Camilo Martin
任何组件套件(例如DevExpress)在其WinForms版本中比WPF版本更快。包括重绘、响应速度和内存需求。 - Lex Lavnikov
34个回答

14

我认为学习WPF是值得的。一旦您掌握了它,表单设计工作会变得更加容易。我不太担心那些“性感”的东西。大多数只是一时的潮流。在WPF中,您可以快速轻松地创建“普通”的WinForms风格应用程序。

整个概念本身更加易于设计,我认为。


2
我同意Rich的观点。WPF的吸引力被过分强调了。我认为这是一项非常出色的技术,提供了一些非常有说服力的理由来使用它……特别是对于标准的、普通的商业应用程序而言。 - cplotts

13

我不同意这里的某些回答。WPF非常适合业务应用(LOB)。(青蛙设计公司的LOB客户端是最好的例子)。除了所有可能使你的UI成为炫目的方式(这在商业应用中并不必要),WPF还为您提供了更多的功能。

数据绑定和模板化功能比Windows Forms更加优越。它还提供了一种更好的分离代码和表示层的方式。我们已经成功地在由2-3个开发人员组成的团队中使用WPF来开发2个LOB应用程序。

你可能会面临的最大问题可能是WPF的陡峭学习曲线(与Windows Forms相比),这将降低那些不习惯WPF的开发人员的开发速度。


1
我必须同意...学习曲线陡峭,但长期来看一定会有回报。我从WPF开始,再也没有回头过。 - TimothyP

11
我们目前正在将应用程序从Windows Forms重写为WPF。是的,这需要一个陡峭的学习曲线,你需要“重新学习”一些东西,但它非常值得。结合WCF,我们发现我们比以往更快地编写了更少的代码,并且更加健壮。坚持一段时间,阅读Adam Nathan的书籍,并查看第三方控件库,如TelerikComponentOne。我认为一个负面因素是设计工具Expression Blend非常难用。最新版本仍处于测试版,但对于我们这些多年使用Visual Studio的人来说,它感觉不太对劲。是的,它主要是为设计师设计的,但有些事情你只能在Visual Studio中做不了。

是的,“比以往更快、更稳健地编写更少的代码”是描述WPF体验的好方式。这并不完全是关于华丽的外观。顺便说一下,自从这篇文章写出来后,Expression Blend已经发布了,现在已经到了第3个版本,并且非常流畅易用——比任何VS.NET设计师都要好。 - Ray Burns
1
这本书有新版本了:http://www.amazon.com/WPF-4-Unleashed-Adam-Nathan/dp/0672331195/ - bobobobo

9
考虑到界面设计的重要性,如果您认为界面设计非常重要,可以选择WPF,因为WPF可以提供更好的用户体验。但是,Windows Forms已经发展了多年,被证明是有效的,并且您可以找到许多熟练的程序员来使用该平台。
此外,可移植性可能是一个问题,因为WPF仅适用于Windows XP SP2及以上版本。
另外,WPF有一个陡峭的学习曲线,这意味着没有特定的WPF经验很难交付出高质量的产品。

8

一个答案是“当你必须支持1.1或2.0时”,因为WPF是.NET 3.0的一部分。 WPF存在已知的操作系统限制,并且存在明显的技能问题:如果您有一组熟悉winforms的开发人员,则使用winforms可能更容易生成稳健的代码。但是,如果您正在编写大量UI代码,则可能值得开始学习WPF。

WPF还与Silverlight共享许多共同点,因此具有可转移的优势。


8

WPF具有许多优点,如卓越的数据绑定功能、关注点分离、设计和逻辑的分离等。

作为一名开发人员,我享受使用XAML定义我的UI而不是被绑定到Windows Forms设计器,并且我感觉良好,因为我可以指望其他设计师使我的应用程序看起来很好。

个人而言,我不在乎旧版本的Windows没有得到支持,但WPF的一个大问题是它当前/永远不会被Mono(http://www.mono-project.com)所支持,因此WPF应用程序将无法在Mac OS或Linux上运行。(尽管Silverlight应用程序可以)。

如果您有时间和资源投资于学习WPF,请这样做!即使你要编写Silverlight应用程序以支持多个操作系统。

如果您需要在多个操作系统上运行桌面应用程序,请坚持使用SWF。


1
WPF有许多优点,例如出色的数据绑定功能,关注点分离,设计和逻辑分离等等...没错。WPF提供的不仅仅是花哨的外观,而是更好的架构选项。 - Daniel Auger
这对我来说是个重大的分歧。我正在升级我的一个应用程序到 "2.0",虽然我最初对 WPF 的所有实验都很好,但我希望应用程序具有跨平台性,所以我将使用 Winforms 来利用 Mono 做 2.0。这不会阻止我使用 WPF 重写其他应用程序。 - Dillie-O

7

有很多不同之处。我们喜欢WPF是因为:

  1. 声明式编程风格。
  2. 动画和状态转换。
  3. Expression Blend是一个很好的工具。
  4. 良好的样式支持。

然而,我们坚持使用Windows Forms是因为:

  1. 当开发者已经了解Windows Forms时,学习WPF需要额外的时间。
  2. WPF无法在Windows 2000或更低版本上运行。

6
Windows 2000有这么重要吗?我的意思是,有多少人被困在那个古老的操作系统中? - Camilo Martin
这是因为微软正在赞助一些特殊的学校版本(Windows 2k)用于旧笔记本电脑和个人电脑 - 我想该项目的名称是FreshStart... - Aykut Çevik
是啊,至少WinXP... Win2000?!得了吧! - Andrei Rînea
@cevik,Fresh Start 似乎在2009年就已经停止更新了。https://www.microsoft.com/Education/Freshstart/FsSplash.aspx - dan-gph
@dangph,这是不幸的事实,我希望他们可以从XP开始 :) - Aykut Çevik

6

在决定使用哪个.NET Framework时,最重要的考虑因素是考虑您的目标受众安装了哪个版本。我发现更多的人安装了较低版本的.NET Framework,只支持Windows Forms,但这只是我的个人经验。


在2009年11月,已经有20-50%的计算机已经安装了.NET Framework 3.0或更高版本,因此它们已经可以运行WPF。对于那些没有安装.NET Framework的用户,您可以将其包含在CD中,或者在应用程序安装时下载.NET Framework客户端配置文件。客户端配置文件在256K DSL线路上下载需要2分钟,并且您可以通过设置从Microsoft的网站下载来节省带宽。 - Ray Burns

5

WPF使将表单设计工作交给真正的设计师变得更加轻松,而不是让开发人员充当设计师。如果您想这样做,那么WPF就是您的答案。如果经典的Windows样式按钮很合适,则应选择Windows Forms。

(许多答案声称如果界面设计对您“很重要”,则应使用WPF,但这太模糊了。界面设计始终“重要”。)


1
如果您认为经典的Windows样式按钮很好,并且您愿意花费更多的时间编写和调试管道,那么WinForms可能是您的选择。一旦掌握,由于其丰富的数据绑定和数据模板、命令架构、附加属性等,WPF开发效率也比WinForms高得多。即使您完全不关心视觉样式,这也是正确的选择。 - Ray Burns
1
“穿着设计师的衣服的开发人员” - 口袋保护套和高领毛衣? - Robert Fraser

5
WPF的优点是它更容易创建具有自定义控件和动画的漂亮GUI。WPF还帮助进一步将表示层和逻辑层分离。如果您有设计师,它允许您将95%的工作交给非编码人员,并允许编码人员专注于逻辑。缺点是Expressions Blend的软件成本,以及Visual Studio代码分析工具的缺乏,因为它们往往会陷入框架调用中,试图呈现XAML。我相信还有其他缺点,但这是我们真正看到的唯二缺点。
主要考虑的是是否需要客户安装.NET 3.0或更好的.NET 3.5 SP1。您可能会得到一些负面反馈。

您可以将.NET Framework包含在CD中,或者设置为从Microsoft网站进行2分钟下载(假设有256K DSL线路)。无论哪种情况,它都可以作为应用程序安装的一部分进行安装。这也适用于ClickOnce。 - Ray Burns
1
我有2M的DSL,整个设置通常需要半小时左右,当它不会在我的(通常是干净安装的)XP机器上崩溃时。 - Camilo Martin
我的经验是,在XP上安装客户端框架(3.5 SP1)大约需要5分钟,包括下载时间。迄今为止,它总是能够无故障地安装。可能会导致速度慢的一些想法包括:1.您正在安装完整的框架而不是客户端框架,2.您的ISP与Microsoft服务器之间的带宽差,没有缓存,3.您的本地机器正在执行Windows Update或其他软件更新,4.您的本地带宽已经饱和(例如通过流媒体音频/视频)。 - Ray Burns
1
也许我表达不够清晰。下载速度而非点击按钮只对决定是否需要安装框架产生部分影响。最重要的考虑因素是,如果您的任何客户处于企业或教育环境中,当地用户可能无法选择安装它。 - Alex

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