WPF简单教程:开篇
WPF(Windows Presentation Foundation)是微软推出的一项桌面编程技术,主要应用领域是企业编程与RIA(富客户端)领域,灵活强大,效果卓著,体验上佳。
WPF是一种编程框架,最出名的一点便是采用了XML作为界面编程语言来描述界面。这主要受益于网页HTML领域编程体验。在网页前端领域,HTML+CSS+Javascript的无敌组合将flash,slivelight,applet扫入了历史的尘埃,可见这种编程思想的强大。WPF充分的借鉴了这种思想,基于XML开发出了XAML这种描述性的界面语言。
然而,XAML只是一种规范性标准,它广泛的应用于各个领域,例如slivelight,XPS,WPF。这里仅仅介绍WPF的XAML。
参考书籍
《WPF编程宝典——使用C#2012和.NET 4.5(第4版)》 作者:Matthew MacDonald
(Pro WPF in C# 2012: Windows Presentation Foundation in .NET 4.5)
图形界面类库的历史
作为一个编程爱好者,我本人也是十分关注界面编程技术的发展的,在写这篇文章之前,也深入了解过GUI编程领域的历史发展。
- 早期,GUI界面刚刚发展起来,采用的是系统的API接口,一般这种接口是典型的C语言接口,抽象程度低,可定制化程度地,编程复杂,参数众多,还需要了解复杂的消息循环机制,效率低下。这个阶段的类库具有代表性的有:Win32,GTK++;
- 之后,GUI编程领域开始高速发展,C++等抽象编程语言开始引入GUI领域,因为其强大的抽象能力非常适合界面对象的描述,因此图形界面领域开始腾飞。这个阶段的代表性类库包括(WTL,MFC,Qt,cocos,Gtkmm,swing,swt,awt);
- 在之后,随着个性化,定置化需求的上升,广大应用程序开发者开始寻求一种灵活方便的类库,能够自定义开发图形界面,因此各种情形类库开始诞生,例如dui(DirectUI:利用DirectX渲染的一种轻型界面类库),WPF(同样基于DirectX技术),以及其他一些不知名的图形类库;
- 随着网页技术的高速发展,编程领域逐渐产生了一种趋势,那就是利用网页技术编写桌面客户端。此时产生的技术有flex(基于flash),浏览器嵌入式界面,electron(基于nodejs与chrome);
可用图形界面库汇总
有可能本人知识面不广,因此知道的不是很全面,只是在这里简要的将主要界面技术罗列一下。
- Win32
- GTK++
- MFC
- WTL
- Qt
- cocos
- Gtkmm
- Swing
- swt
- awt
- DirectUI
- WPF
- electron等一系列网页技术
为什么不选择win32与Gtk++
开发复杂困难,抽象程度地,资料匮乏,造成开发进度缓慢,出货慢,成品率堪忧。选择这种基础接口纯属自讨苦吃。
为什么不选择MFC,WTL,Gtkmm
这三种几面技术基本上属于第二代技术,虽然有些经过部分改造,引入了一些现代特征,例如MFC引入XML描述,但是,还是那个原因:可拓展性差,可定制化程度偏低,编程较为复杂,基本上属于一种落后技术,开发一些小工具软件,放置一些按钮等小控件,还是可以用的,但是较为复杂的,高度定置化的软件,这三种技术就不怎么可用了。
为什么不选择cocos
cocos是MacOS平台上的独有类库,基本上只导出Objective-C接口。对于这种不能再windows平台上使用的技术,不能利用C++引用的技术,他的存在简直没有价值。
为什么不选择swing,awt,swt
首先来说,awt是一种非常蹩脚的技术,基于原生各个系统原生组件,因此编程上受限很大,在不同平台上拥有不同的表现,甚至可能编译不通过。swt同样如此。另外,swing,swt,awt和上文提到的MFC,Gtkmm都是基于一种很古老的编程理念,导出的编程模型原始简陋,外观粗糙,可玩性较低。swing强大一些,但是有限。
为什么不选择Qt技术
首先Qt是一个非常好的技术,这句话是对Qt的肯定,这个类库从出生到现在仍然在不断的发展和改进,从1.0版本到现在的5.x版本,仍然在不断进步。其中引入了许多特性,具有完整的应用程序解决方案,完全使用它的类库,可以一字不改的在不同平台上编译。
但是,我不喜欢这个技术。因为,它每个版本竟然不都不兼容,Qt 3.X版本的源码放到Qt 4.X上居然无法编译,这让我十分的不理解。学习它就好像上了贼船,你不知道什么时候就过时了。
为什么不选择网页技术
因为我不信任他的性能。编写一些小工具可能没什么,编写一些大块大块的展示性应用可能也很实用,但是,编写小工具我有MFC,编写超大型工程我用WPF。网页技术编写Photoshop这种专业应用力有未逮。
为什么不选择DirectUI
类库太低端,需要做的东西还很多。
WPF让我受益匪浅
不管怎么说wpf的学习经历让我受益匪浅,MVVM和数据绑定和XML才是界面类库的未来。未来有可能我会自己编写一套界面类库,但不是现在,现在还是让我们仔细研究一下WPF吧。