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++;
    WPF简单教程:开篇_第1张图片
  • 之后,GUI编程领域开始高速发展,C++等抽象编程语言开始引入GUI领域,因为其强大的抽象能力非常适合界面对象的描述,因此图形界面领域开始腾飞。这个阶段的代表性类库包括(WTL,MFC,Qt,cocos,Gtkmm,swing,swt,awt);
    Java Swing界面类库
  • 在之后,随着个性化,定置化需求的上升,广大应用程序开发者开始寻求一种灵活方便的类库,能够自定义开发图形界面,因此各种情形类库开始诞生,例如dui(DirectUI:利用DirectX渲染的一种轻型界面类库),WPF(同样基于DirectX技术),以及其他一些不知名的图形类库;
    WPF界面类库
  • 随着网页技术的高速发展,编程领域逐渐产生了一种趋势,那就是利用网页技术编写桌面客户端。此时产生的技术有flex(基于flash),浏览器嵌入式界面,electron(基于nodejs与chrome);
    Electron

可用图形界面库汇总

有可能本人知识面不广,因此知道的不是很全面,只是在这里简要的将主要界面技术罗列一下。

  1. Win32
  2. GTK++
  3. MFC
  4. WTL
  5. Qt
  6. cocos
  7. Gtkmm
  8. Swing
  9. swt
  10. awt
  11. DirectUI
  12. WPF
  13. 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吧。

你可能感兴趣的:(WPF,简单教程,C#学习感悟)