在前面的章节,我们讨论了WPF是什么,还涉及了一点点WinForms。在本章节,我将尝试比较两者,尽管它们服务的目的一样,却存在很多的区别。如果你以前从来没有接触过WinForms,或者WPF是你学习的第一种GUI框架,请跳过这一章节。但是如果你有兴趣的话,不妨尝试一读。
先说说两者最重要的区别。WinForms只是标准窗体控件顶部的一层(如文本框),而WPF从零开始,几乎在所有场景下都不依赖于标准窗体控件。这个区别看起来似乎微不足道,但是如果你之前有用过依赖于Win32/WinAPI框架的话,你一定不会这么认为。
举一个很好的栗子,现在有一个带图片和文字的按钮。它并不是一个标准窗体控件,WinForms无法提供现成的,你不得不自己画图片,实现支持图像的按钮,或使用第三方控件。相反,在WPF,按钮可以包含任何东西,因为它本质上是一个带内容和不同状态的边框。WPF的按钮就好像是一个看不见的物体,可以放入各种其他控件到里面,不部分WPF控件都是如此。你是想要一个带图片和文字的按钮?很简单,只要把一张图片和一个文本块放到按钮里面就搞定了。在标准WinForms控件之外好像你找不到这种灵巧的方式,这就是为什么像带图片的按钮这种简单的控件实现会有如此大市场的原因。
这种灵活性的缺点是你必须付出更大的努力去实现某个东西,而在WinForms却是非常容易的。因为它只是在你所使用的场景下创建的,无法通用。至少在最开始的时候是这种感觉,你创建了一个模块,建立了一个带图片和一些对齐文字的ListView,这个时候你发现这个在WinForm ListViewItem只是一行代码的事。
这仅仅是一个区别而已,当你在使用WPF时,你会发现其实在其他区别上,这些背后的原因是一样的:WPF只用自己的方式来处理事情,要么更好要么更差。你不再被Windows方式所约束,但是,得到这种灵活性的代价是,你需要付出更多的努力。
下面的表完整列出了WPF和WinForms的优势,它能让你更多的理解你要进入的领域。
WPF优势
1.比较新,从而更符合目前的标准。
2.微软正在使用它开发很多新应用,比如Visual Studio。
3.更灵活,你不必再去自己写控件或者买控件。
4.你所使用的第三方控件更多的聚焦在WPF上,因为它比较新。
5.XAML使得GUI的创建和编辑更加容易,而且允许拆分设计器(XAML)和代码器(C#, VB.NET).
6.数据绑定,你可以更加彻底的分离数据和布局.
7.用硬件加速绘制图形用户界面,性能更好。
8.允许你在Windows应用和web应用之间进行用户交互。
WinForms优势
1.出现比较久,已经经历很多检验和测试。
2.已经有很多第三方控件供你购买或者免费使用。
3.Visual Studio设计器仍然更适合WinForms,在WPF很多东西你还是需要自己去开发。