TOC

This article has been localized into Chinese by the community.

关于WPF:

WPF对比WinForms

在上一章节中,我们具体讨论了什么是WPF,以及一些关于WinForms的简要介绍。由于WPF和WinForms即有同样的目的性,又存在很大的差异,所以在本章节中,我会尝试着去对比和分析它们。如果你没有过WinForms的开发经验,尤其WPF又是你接触的第一款开发GUI框架,那么你可以跳过此章节。但是如果你有兴趣了解它们之间的差异,那就请继续阅读。

WinForms 與 WPF 間最大的差異在於 WinForms 只是單純在 Windows 標準控制項 (例如:TextBox) 上疊一層,而 WPF 幾乎是全面從零建構,並未依賴任何 Windows 標準控制項。這差異看起來很微妙,實則不然。如果你曾經使用過依賴 Win32/WinAPI 的框架,就一定會注意到這種差異。

对此一个很好的例子就是:一个带有图像和文本的按钮。由于这不是一个标准的Windows控件,所以WinForms中并不能为您提供这种按钮。相反,您必须自己绘制图像,自己实现支持图片的按钮或者使用第三方控件。而在wpf中,一个按钮可以包含任何东西,这是因为它本质上是有边界的内容和状态(例如未触摸,悬停,按下)的组合体。与大多数其他WPF控件一样,WPF按钮“看起来很简洁”,这意味着它可以在其中包含一系列其他控件。您想要一个带有图像和文本的按钮?只需在按钮内放置一个Image和一个TextBlock控件,就完成了!在标准的WinForms控件中你根本无法获得这种灵活性,这就是为什么有一个由相当简单的控件的实现带来的巨大市场,例如带图像的按钮等等。

WPF这种灵活性所带来的缺点是:你需要做更多的事来做出在winForm中很容易做出的内容。 因为WPF是专为你所想要的内容而生的。你或多或少在一开始会有这种感觉,比如当你试着用WPF来实现一个具有图片元素和华丽字体的ListView的时候,WinForms的ListView控件用一句话就能完成了。

这只是两者的一个区别,但是当你使用WPF时,你会发现这其实是造成其他区别的根本原因--WPF仅仅是在用自己的方式来实现所有的东西,不论好坏。你不再局限于windows的解决方案。然而为了得到这种灵活性,当你真正想要做出windows风格的东西时,往往需要花费更多的精力

以下是WPF和WinForms关键优势的主观描述。应该可以让你更好地选择用哪一种技术。

WPF的优势

  • 更年轻,与时俱进
  • 微软在很多新的应用中使用它,例如Visual Studio
  • 更灵活,你不需要自己造或者购买新的控件,就可以完成更多的工作
  • 当你使用第三方控件时,开发人员更青睐于新生的WPF
  • XAML可以让你更简单地创建和修改你的GUI(界面),并且使前台设计人员和后台编程人员可以分离(C#,VB.NET等等)
  • 数据绑定使数据和界面的分离更加简洁
  • 使用硬件加速来描绘GUI(界面),性能更好
  • 可以允许给Windows应用和Web应用同时创建用户接口

WinForms的优势

  • 更久远,因此久经考验
  • 已经有很多免费或收费的第三方控件供你使用
  • 就WinForms而言,在Visual Studio中的设计器仍然比WPF更好,在WPF中更多的工作需要你自己来完成。