WPF是WindowsPresentationFoundation的缩写。它是微软公司最新的利用.NET框架解决GUI框架的方案。
但是GUI框架到底是什么?GUI是图形用户界面(GraphicalUserInterface)的缩写,很有可能你现在看到界面的就是一个。为了与你的电脑交互,Windows系统使用了GUI,并且,你用来阅读本文的浏览器也是一个用于浏览网页的GUI。
一个GUI架构可以让你创造具备多种GUI元件的应用,比如标签,文本框以及其他广为人知的元件。如果没有GUI框架,你不得不手动地去绘制这些元件,并且以文字和鼠标输入的方式处理所有的用户交互。这样的工程量会很大,因此,大多数的开发者都会使用GUI框架来承担所有的基础工作,以便自己专注于更高层面的应用开发。
GUI框架有许多,但是对于.NET开发者来说,目前最令他们感兴趣的是WinForms以及WPF。WPF是最新的,但是微软公司依然维护和支持WinForms。这两者存在着不少不同之处,但是它们的目的是一致的:将创造出带有漂亮GUI的应用的工作变得简单。
WPF与WinForms区别这两个框架的设计目标基本相同,但实际上两者之间的差异非常巨大,我会在这一节对这方面进行分析。
WinForms与WPF间最大的差异在于WinForms只是单纯在Windows标准控制项(例如:TextBox)上迭一层,而WPF几乎是全面从零建构,并未依赖任何Windows标准控制项。这差异看起来很微妙,实则不然。如果你曾经使用过依赖Win32/WinAPI的框架,就一定会注意到这种差异。
举个例子,要是想实现一个带有图像和文本的按钮,在WinForms里面,你只能自己用画图之类的方式特意去实现一个(或者用第三方控件),因为”一个带有图像和文本的按钮”并不是一个标准的Windows控件。而在WPF里面,这可以通过递归组合的方式轻松实现,具体来讲,就是在按钮(Button)中放置一个图像(Image)和文本方块(TextBlock)而已。实际上,大部分的WPF控件都能用这种方式随意组合,一个控件可以包含其他任何控件,你可以透过组合各种基本控件来产生复杂控件,以满足不同的需求,而这种灵活正是WinForms所不具备的。
WPF这种灵活性所带来的缺点是:你需要做更多的事来做出在winForm中很容易做出的内容。因为WPF是专为你所想要的内容而生的。你或多或少在一开始会有这种感觉,比如当你试着用WPF来实现一个具有图片元素和华丽字体的ListView的时候,WinForms的ListView控件用一句话就能完成了。
这只是两者的一个区别,但是当你使用WPF时,你会发现这其实是造成其他区别的根本原因--WPF仅仅是在用自己的方式来实现所有的东西,不论好坏。你不再局限于Windows的解决方案。然而为了得到这种灵活性,当你真正想要做出Windows风格的东西时,往往需要花费更多的精力。
以下是WPF和WinForms关键优势的主观描述。应该可以让你更好地选择用哪一种技术。
WPF的优势?更年轻,与时俱进?微软在很多新的应用中使用它,例如VisualStudio?更灵活,你不需要自己造或者购买新的控件,就可以完成更多的工作?当你使用第三方控件时,开发人员更青睐于新生的WPF?XAML可以让你更简单地创建和修改你的GUI(界面),并且使前台设计人员和后台编程人员可以分离(C#,VB.NET等等)?数据绑定使数据和界面的分离更加简洁?使用硬件加速来描绘GUI(界面),性能更好?可以允许给Windows应用和Web应用同时创建用户接口
WinForms的优势?更久远,因此久经考验?已经有很多免费或收费的第三方控件供你使用?就WinForms而言,在VisualStudio中的设计器仍然比WPF更好,在WPF中更多的工作需要你自己来完成。
WPF开发工具正像之前所说的一样,WPF是XAML(标记语言)、C#/VB.NET以及其他任意.NET语言的组合。XAML和.NET语言的源代码都被任意编辑器编辑(即使是Windows也可以)下面的内容),然后通过命令行编译。不过,大多数开发人员都喜欢使用IDE(集成开发环境),因为IDE植入编辑代码、设计UI、编译等各种工作都更容易了。
VisualStudio本身很昂贵,但对.NET/WPF开发的首选。不过微软开发了一个免费的社区版来让每个人都能方便地使用.NET和WPF。社区版功能会少一些,但学习WPF以及已经制作了实际的应用,已经完全成熟了。
所以从微软