1.开篇前言

      很多时候了解一项新技术的历史和趋势往往比这项技术的本身价值还要重要。WPF作为一项新技术(已经三年多了,或者应该叫老技术了),我们都有必要了解它的来龙去脉,尤其是公司的CTO、技术总监、架构师等决策层,因为他们对技术的选型及应用具有决定权。对于开发者来说,了解自己正在从事的这个技术的前世今生,有助于我们更好的认识技术本身的价值,也可以避免我们少走一些弯路(圣殿骑士就走过很多弯路,所以对此比较感慨)。从IT技术发展的这些年可以看出,技术对于各大公司只是竞争的一种手段,而对于大多数程序员来说技术就是特饭碗甚至于生命,所以大家站的立场不同,也会形成各自不同的观点。放眼现在的全球IT巨头,摩托罗拉和诺基亚等企业的逐渐衰落,苹果、谷歌和微软等巨头公司在硅谷已经上演了三国大战。国内腾讯、百度、新浪、网易、盛大、搜狐、阿里巴巴等公司在各个领域的混战已经表明新的市场和新的技术是他们的主要战场,那么有些老技术必将淡出历史舞台,部分新技术也将被推到台前,作为IT人了解这些可以帮助我们看得更远,避免一直处在自己的狭小空间当中,等到了某个技术的真正失落,我们才骤然发现失业已经降临到我们身边,前途将一片灰暗!

2.本文提纲

· 1.开篇前言
· 2.本文提纲
· 3.WPF介绍
· 4.WPF技术发展历史
· 5.之前的技术——逐渐淡出历史舞台
· 6.WPF——王者的到来
· 7.与现有技术的对比
· 8.本文总结
. 9.系列进度

3.WPF介绍

Windows APIWindows Presentation Foundation (WPF) 是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF,您可以创建广泛的独立应用程序以及浏览器承载的应用程序。 WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎(这样就可以保证图像和影像具有高清晰度),旨在利用现代图形硬件的优势。WPF 通过一整套应用程序开发功能扩展了这个核心,这些功能包括可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF 包含在如下图的 Microsoft .NET Framework 3.0中,使您能够生成融入了 .NET Framework 类库的其他元素的应用程序(因为WPF包含在.NET Framework 3.0 里面,所以我们这里不列出3.5和4.0的框架)。
                                                                                       .NET框架以及元素依赖图

4.WPF技术发展历史

微软在1983年春季就宣布开始研究开发Windows,到现在已经有27年的历史,这27年来,微软官方主力推行的编程语言与API有四个主要阶段:
  • 1983~1991年:C搭配Windows API。当时的程序员是很少的,并且开发一个项目也比较的不容易。
  • 1992~2001年:这段时期C++搭配MFC库。在历史上MFC是最多人用的Windows编程方法。但此后MFC技术也逐渐退出了历史的舞台。
  • 2002~2006年:(C#、VB以及其他语言)+Windows Form框架。这段期间IT技术的焦点是在Web上,所以虽然大家都在用.NET,但真正的主角是ASP.NET,而不是Windows Forms。Windows Forms还没等熬出头,WPF就出现了。Windows Forms注定会是历史中“最少人使用的微软开发技术”。Windows Forms其实是不错的技术,在很多方面都做得挺不错,比如在UI上、图形编程上、开发效率上、稳定性上都做得很让人敬佩,但是我们最后看到的结果却是大家没有引起足够的重视,很多人更偏向于用Delphi和MFC,对Windows Forms却视而不见,所以造成的最后结果就是Windows Forms生不逢时。
  • 2007~现在 :2007年1月30日,Windows Vista正式全球同步发布。它之所以能实现那么绚丽的效果,最关键的一点就是Windows Presentation Foundation(WPF),WPF所带来的震撼视觉效果和用户体验使Vista的效果如此绚丽,虽然Vista在后来最终成为了一个败笔,但它为Windows 7打下了坚实的继承。后台语言(C#、VB以及其他语言)+XAML构成的WPF。你可能觉得很奇怪,微软为何释出两个作用相似,却不同且不相容的.NET API。因为时代的改进,用户对视觉感受需求不断提高。因为WPF支持硬件加速、精确颜色、浮点坐标、动画实现、三维、视频感受等要求提高。而传统的 Winform 是到不到这些效果的。

5.之前的技术——逐渐淡出历史舞台

      旧的事物迟早会退出历史舞台,新的生命会经过曲折的里程登上王座。从图像界面的出现那一刻起,用户界面(UI)就进入了一个特殊的历史时期。在随后几年里,出现了很多具有历史意义的界面风格。现在,经典的Windows窗口风格已经存在了10多年,即使是深受用户喜爱的Windows XP风格也已出现五年有余。无疑大家与我一样,期待着全新视觉界面的出现。另一方面,当今计算机处理芯片飞速发展,特别是显示芯片,显示卡几乎成为了一台微型的计算机。但是,其强大的处理能力却没有得到充分的应用。目前,显示卡GPU(Graphics Processing Unit)的处理能力大多只应用在游戏和多媒体领域。为了给用户提供最强的体验,满足不断提高的用户视觉需求,Windows Vista引入了全新的图形子系统——WPF。她能充分利用显示卡的处理能力提供给用户最绚的视觉效果。
在Windows Vista出现之前,Windows平台的图形系统主要有:GDI、GDI+、Direct3D。其中,GDI的应用领域最为广泛。GDI图形系统已经形成了很多年并且已经逐渐形成了自己的一套开发体系。它提供2D图形处理、文本处理,以及有限的图像处理功能。虽然在一些显示卡上支持部分的GDI加速,但是其效果与现在的Direct3D相比还是很弱小。GDI+开始出现是在2001年,它引入了2D图形的反走样、浮点数坐标、渐变以及单个象素的Alpha支持。它几乎支持所有的常用图像格式。但是,GDI+没有任何加速功能(全部是用软件实现)。
 
                   NT依赖简图
为了兼容性,GDI和GDI+在Windows Vista和现在的Windows 7中仍被支持,只是功能稍有改变,但大体上都还是没有差别。

6.WPF——王者的到来

在Windows Vista和Windows 7中,GDI、GDI+和WPF并行存在。但是,WPF所有的操作都不依赖于GDI和GDI+,而是间接依赖于强大的Direct3D。请参考下面的WPF核心组件图。
   
              WPF核心组件图
上图中的标示为暗红色的是WPF的三大核心组件,其中milcore组件,它的职责是完成与Direct3D的交互。并且出于效率和安全考虑,milcore由非托管代码实现。WPF 中的所有显示是通过 DirectX 引擎完成的,可实现高效的硬件和软件呈现。WPF 还要求对内存和执行进行精确控制。milcore 中的组合引擎受性能影响关系大,需要放弃 CLR 的许多优点来提高性能。
WPF的两大核心组件PresentationFramework和PresentationCore都位于通用语言运行库(CLR)之上。那么就可以看出,WPF的大部分代码都是以托管形式存在的。这两大组件提供了WPF项目需要的函数库和功能库,由于是以托管的形式存在,所以也避免了我们直接操作底层和出现诸如内存泄露的可能性。
关于WPF的是怎样执行的,我这里也根据自己的一些理解画出了如下执行序列图。此图比较简单,但很容易说明问题,如果把中间的每一步骤都画出来,可能会比较大,为了使大家能看明白,所以中间省略了一些操作。
WPF执行序列图
前面说了WPF的前世今生,那么对于开发人员,我们最关心的WPF所提供的功能。下面的这幅图展示了WPF基本功能和服务。  
                                                    WPF基本功能结构
正如上面的这幅图,可以看出一共分成了五大块(Core Presentation、User Interface Services、Base Services、Document Servies和XPS Viewer):
  • Core Presentation:包含了所有的图形效果,如图形、2D图形、3D图形、文本、音频、视频和显示效果。同时还包括强大的动画效果,动画可以应用前面的所有元素。最下面的那个就是视觉基本元素。
  • User Interface Services:包含了Application Services(应用程序服务)、Deployment Services(部署服务)、Controls(控件库)、Layout(布局)和Data Binding(数据绑定).
  • Base Services:提供了XAML支持、Accessibility(提高开发效率)、Input&Events(输入和事件的支持)、Property 
    System(属性系统)。
  • Document Servies和XPS Viewer则提供了基本的打印和表报服务,可以通过这些组件实现自定义的打印和显示效果。
基于上面的特性以及我们使用的情况可以总结出:
在输入方面:WPF支持键盘、鼠标、手写笔、触摸屏,蓝牙录入、视频扑捉等,所以基本没有任何限制,在和外部设备的交互上:有驱动、COM、Win32或通信协议支持的任何设备。打印和报表方面:可访问打印对话框、打印队列、打印窗体、控件以及很多可选操作,同时对报表也支持得很好。同时支持流文档和固定文档,对命令的支持以及对文件的无限制访问,最后尤其在动画、图形图像、3D、影像的支持相当好(其他技术是很难做到的),所以WPF除了在性能方面存在着缺陷以外,其他方面可以说是做得非常优秀,同时我们有信心相信微软会在这方面做得更好!

7.与现有技术的对比

WPF作为一项已经用了将近三年的技术,它到底和现有的一些技术有哪些区别和联系呢?下面一副图简单的介绍了它和现在的一些技术的相似之处。
WPF
现在的技术
XAML
XHTML
Layout
WinForms 2.0 Panels
Data Binding
ASP.NET Syntax
Data Templates
ASP.NET Templates(Atlas)
Styles
CSS
Control Templates
 
3D
Managed DirectX
Animation
Flash
从上面可以看出,WPF技术和其他的技术有很多相似之处,比如XAML和XHTML、Styles和CSS等尤其相似,所以对我们的开发人员来说学习也不是一件难事。

8.总结

这篇文中介绍了WPF的前世今生,同时介绍了WPF的运行原理和基本应用,在最后也介绍了WPF所包含的主要功能和与现有技术的对比,那么在下一篇我们会 讲解WPF的实际开发,通过一个案例对比WPF和之前的WinForm之间的差别,从而对WPF有一个正确的认识。

最后圣殿骑士会尽心尽力写好这个系列,同时由于是自己 对这些技术的使用总结和心得体会,错误之处在所难免,怀着技术交流的心态,在博客园和51CTO发表出来,所以希望大家能够多多指点, 这样在使一部分人受益的同时也能纠正我的错误观点,以便和各位共同提高,后续文章敬请关注!

9.系列进度(红色标示已发布)

· 1. WPF 基础到企业应用系列1——开篇有益
· 2. WPF 基础到企业应用系列2——WPF前世今生
· 3. WPF介绍 、用WinForm和WPF实现同一个例子的案例。
· 4. Application、window、多线程、XAML、逻辑树与可视树及内容模型
· 5. 使用面板做布局(几种布局控件的XAML及CS代码,综合布局等)
· 6. 依赖属性、附加属性(基本、继承、元数据)
· 7. 路由事件、附加事件
· 8. 命令
· 9. WPF控件分类介绍与使用技巧(ContentControl、HeaderedContentControl…… Decorator)
· 10. 尺寸缩放、定位与变换元素
· 11. 资源
· 12. 数据绑定(基本、值转换、验证、集合的筛选、排序、分组、主从、数据提供者)
· 13. 样式
· 14. 模板
· 15. 多语言、皮肤和主题
· 16. 2D图形
· 17. 3D图形
· 18. 动画(几种动画的应用)
· 19. 音频、视频、语音
· 20. 文档、打印、报表
· 21. 用户控件和自定义控件
· 22. Win32、Windows Form以及ActiveX之间的互用性
· 23. 构建并部署应用程序(ClickOnce部署、微软setup /InstallShield+自动更新组件)
· 24. WPF的模式讲解及实例(MVC Demo)
· 25. WPF的模式讲解及实例(MVP Demo)
· 26. WPF的模式讲解及实例(MVVM Demo)
· 27. 性能优化(WPF项目的瓶颈)
· 28.一个完整WPF项目(普通架构版)
· 39. 一个完整WPF项目(MVVM架构版)
· 30. WPF 4.0新功能
本文转自KnightsWarrior51CTO博客,原文链接:http://blog.51cto.com/knightswarrior/344622 ,如需转载请自行联系原作者

WPF 基础到企业应用系列2——WPF前世今生相关推荐

  1. 一起谈.NET技术,WPF 基础到企业应用系列5——WPF千年轮回2

    一,摘要 首先很高兴这个系列能得到大家的关注和支持,前端时间身体状况不适,所以暂停了更新,对此表示非常抱歉,以后会逐渐加快进度,不过由于这是一个很长的系列,我也想把它写好,所以以后也会慢慢来,在这个系 ...

  2. WPF 基础到企业应用系列5——WPF千年轮回 续前缘

    一,摘要 首先很高兴这个系列能得到大家的关注和支持,前端时间身体状况不适,所以暂停了更新,对此表示非常抱歉,以后会逐渐加快进度,不过由于这是一个很长的系列,我也想把它写好,所以以后也会慢慢来,在这个系 ...

  3. WPF基础到企业应用系列8——依赖属性之“风云再起”

    一. 摘要 首先圣殿骑士很高兴"WPF 基础到企业应用系列" 能得到大家的关注.支持和认可.看到很多朋友留言希望加快速度的问题,我会尽力的,对你们的热情关注也表示由衷的感谢.这段时 ...

  4. WPF 基础到企业应用系列1——开篇故意

    參考资料 提到參考资料,大家第一感觉就是MSDN,当然我也不例外.这个站点基本上是学习微软技术的首选站点,除了这个站点以外,我还參考了非常多其它的社区和站点,基本上都在.NET 技术社区之我见(英文篇 ...

  5. WPF基础到企业应用系列7——深入剖析依赖属性(三)

    八. 只读依赖属性 我们以前在对简单属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只读的,它们经常用于报告控 ...

  6. C#-WPF基础入门和进阶系列课程1 运算符封装和案例

    创建控制台项目,主函数中定义创建如下: 任何复杂的业务,都是在此基础上面去增加扩展出来的! 根基基础扎实了,变化的业务输出也才会是水到渠成的事情: 否则您仍然会寸步难行: #region 运算符封装基 ...

  7. WPF基础学习笔记(一)Dependency Object 和 Dependency Property

    .依赖属性是WPF个人觉得对精彩和最有特色的部分.所以特地先拿出来. 首先要实现Dependency Property 则必须要继承Dependency Object.如果看下WPF的基础控件其实都间 ...

  8. WPF基础之几何图形

     之前的总结 01 WPF基础分享之布局 02 WPF基础之路由事件 03 WPF基础之内容控件 04 WPF基础之元素绑定 05 WPF基础之命令 06 WPF基础之资源 07 WPF基础之样式 0 ...

  9. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    [WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...

最新文章

  1. 大学计算机基础 学年教学计划,大学计算机基础教学计划.pdf
  2. MYSQL不能从远程连接的解决方法
  3. 没SBA,就试试SBS吧
  4. 53亿美元,今年最大一笔杠杆并购案!为什么会是它?
  5. 集合(normal)
  6. 深入浅出 Java Concurrency (6): 锁机制 part 1[转]
  7. Spring框架----切入点表达式的写法
  8. dataGruidView整行选中
  9. 计算机与管理科学的交叉与融合,计算机信息管理学科交叉融合研究论文
  10. ASCII码值对照全表
  11. 回到现实的民营航天,离商业化还有多远?
  12. 计算机进入桌面黑屏怎么办,电脑进入桌面后黑屏如何修复 电脑经常进入桌面之后黑屏的处理方法...
  13. 核心路由器市场分析:07回顾以及08展望
  14. Linux开发板实现 NTP时间获取
  15. ubuntu服务器dns修改,如何在 Ubuntu 16 中修改 DNS 服务器?
  16. 大数据技术在商业银行中的应用:场景、优势与对策
  17. 原生与H5混合式开发详解
  18. 向模拟器的sdcard中添加文件
  19. 贝尔机:带你领略编码的魅力
  20. python公历转农历_有没有 python3 可用的农历转公历的包?

热门文章

  1. opencv2对于读书笔记——二值化——thresholded功能
  2. DWZ (JUI) 教程 dwz框架 刷新dialog解决方案
  3. 系统架构技能之设计模式-抽象工厂模式
  4. 严重的“Access:7”供应链漏洞影响100多家厂商150多款联网设备等产品
  5. 微软推出 Project Freta:免费查找云虚拟机上的恶意软件
  6. MFC添加View的方法
  7. 搞不清FastCgi与PHP-fpm之间是个什么样的关系
  8. [回顾]事件对象——event
  9. decide your linux OS is GUI or not
  10. [SAP ABAP开发技术总结]ABAP调优——代码优化