在创建新的图形用户界面时,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个回答

4
如果您拥有MSDN许可证,请查看Expression工具。它专门为WPF设计,可以直接导出到Visual Studio,并且可能有助于您的过渡。

3

WPF中存在一个已知的文本渲染问题。许多用户报告称,使用大量反锯齿和像素混合会导致文本模糊。在某些情况下,这是一个很大的问题,据我所知,微软已经在某种程度上承认了这一点。


9
这个问题在.NET 4中得到了解决--请参考http://blogs.msdn.com/text/archive/2009/08/24/wpf-4-0-text-stack-improvements.aspx - Ben M

3

在过去的三年半时间里,我一直在进行Windows表单开发(在两家公司)。这两个应用程序都被广泛使用,并最终出现了GDI问题。大型Windows表单应用程序最终会耗尽GDI资源 - 导致最终用户需要重新启动。


3

3
如果您只关心支持 Windows 平台并且不介意学习所需的时间,那么选择 WPF 吧。它快速、灵活、易于更换皮肤,并且有很棒的工具可供使用。

3
作为额外的好处,Silverlight基于WPF,从任意一个开始都可以让你掌握另一个的工作方式。如果事情继续向基于Web的方向发展,拥有先前的知识(和现有代码库)可以轻松转移到浏览器(或Windows Live Mesh),这可能有助于给你的软件带来额外的生命力。

3
如果您决定使用WPF,请考虑上面答案中已经解释的优缺点,我强烈推荐观看这个与Billy Hollis的dnrTV剧集。请点击此链接

我特别喜欢这个视频的前25分钟左右,Billy Hollis在视频中展示了WPF和WinForms之间一些能力差异。 - Ray Burns

2

以下是Mark之前的帖子中的一句话:

  • 在Windows Forms中,您设计用户界面,然后编写代码来驱动该用户界面,通常还包括驱动数据对象的代码。
  • 在WPF中,您投资于驱动数据对象的业务层,然后设计一个监听数据对象的界面。

我认为这更多是一种设计选择,而不是是否使用Windows Forms或WPF。但是,我可以理解某些技术可能更适合特定的方法。


2
Scott在抱怨Expression Blend,他作为开发者觉得它没有意义。我第一次接触Expression Blend时也有同样的反应。然而,现在我认为它是一个非常有价值的工具,但它确实取决于你是什么类型的开发者。
我是一个用户界面开发者,曾经不得不担任Integrator角色,最终发现Expression Blend在以所见即所得的方式创建样式和控件模板方面非常有用。我几乎总是同时在同一个项目中运行Expression Blend和Visual Studio。
我还认为,在Expression Blend中尝试并查看生成的XAML是学习WPF API的一个很好的方法,就像在Windows Forms设计器中使用并检查其生成的C#代码有助于学习如何使用你正在设计的东西一样。
Expression Blend非常有用。如果你正在处理应用程序的视觉效果,尤其是要试一试它。

1

只有当您没有 WPF 技能并且不想投资于它时 :)


2
-1 鼓励人们思考,不投资于 WPF 实际上是一个有效的选择。 - Turing Complete
2
我认为每个人都误解了我的回答,我说“你不想投资WPF”,这并不意味着“不要投资WPF”。是这样吗? - akjoshi
我会让 Stack Overflow 的用户来决定。 - akjoshi

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