WPF简介

目录

什么是WPF?

WPF的历史?

为什么要用WPF及WPF作用

WPF与winForm区别?

什么是WPF?

Windows APIWindows Presentation Foundation (WPF):Windows 客户端应用程序,微软推出的基于Windows 的用户界面框架。

WPF是应用程序一个崭新的概念:数据驱动程序,以数据为中心,通过Bind将界面永远定位为从属地位。

说白了就是一个把数据呈现给用户的UI界面。

WPF不是一个简单的UI界面显示 ,它的功能包括可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。

WPF是基于DirectX引擎的,支持GPU硬件加速,不支持硬件加速时也可以使用软件绘制。高级别的线程进行绘制,提高使用者的体验。自动识别显示器分辨率并进行缩放,比如Vista。


WPF技术发展历史

微软1983春宣布研究Windows,微软官方主力推行的编程语言与API有四个主要阶 段:

1983~1991年:C搭配Windows API。当时程序员少,开发一个项目比较困难。

1992~2001年:C++搭配MFC库。MFC是最多人用的Windows编程方法。慢慢的MFC技术逐渐退出了历史的舞台。

2002~2006年:(C#、VB以及其他语言)+Windows Form框架。这段期间IT技术的焦点是在Web上,主角是ASP.NET,而不是Windows Forms。这时WPF就出现。Windows Forms其实是不错的技术,但没有引起大家重视,更偏向于用Delphi和MFC,造成Windows Forms生不逢时。

2007~现在 :2007年1月30日,Windows Vista正式全球同步发布。它之所以能实现那么绚丽的效果,最关键的一点就是Windows Presentation Foundation(WPF),WPF所带来的震撼视觉效果和用户体验使Vista的效果如此绚丽,为 Windows 7打下了坚实的继承。后台语言(C#、VB以及其他语言)+XAML构成的WPF。WPF支持硬件加速、精确颜色、浮点坐标、动画实现、三维、视频感受等要求提高。而传统 Winform 是到不到这些效果的。

为什么要用WPF及WPF作用

每次的技术前进都会让我们提高工作的效率,WPF为我们减少了很多的代码,而且实现了逻辑与界面很好的分离。

WPF,你可以创建丰富、美妙的连接应用程序,以充分利用 Windows 平台,其中包括 UI、媒体、脱机通信和文档支持

WPF核心组件

WPF 中的所有显示是通过 DirectX 引擎完成的,可实现高效的硬件和软件呈现。

WPF 对内存和执行进行精确控制。

milcore组件,它的职责是完成与Direct3D的交互,出于效率和安全考 虑,milcore由非托管代码实现。

milcore 中的组合引擎受性能影响关系大,需要放弃 CLR 的许多优点来提高性能。

WPF的两大核心组件PresentationFramework和PresentationCore都位于通用语言运行库(CLR)之上。WPF的大部分代码都是以托管形式存在的。这两大组件提供了WPF项目需要的函数库和功能库,由于是以托管的形式存在,所以也避免了我们直接操 作底层和出现诸如内存泄露的可能性。

WPF基本功能和服务

五大块:

Core Presentation:包含了所有的图形效果,如图形、2D图形、3D图形、文本、音频、视频和显示效果。包 括强大的动画效果,动画可以应用前面的所有元素。最下面的那个就是视觉基本元素。

User Interface Services:包含了Application Services(应用程序服务)、Deployment Services(部署服务)、Controls(控件库)、Layout(布局)和Data Binding(数据绑定).

Base Services:提供了XAML支持、Accessibility(提高开发效率)、 Input&Events(输入和事件的支持)、PropertySystem(属性系统)。

Document Servies :基本的打印,实现自定义的打印

XPS Viewer:表报服务,可以通过这些组件显示 效果。


基本特性及使用情况


在输入方面:WPF支持键盘、鼠标、手写笔、触摸屏,蓝牙录入、视频扑捉等,所以基本没有任何限制

外部设备的交互:有驱动、COM、Win32或 通信协议支持的任何设备

打印和报表方面:可访问打印对话框、打印队列、打印窗体、控件以及很多可选操作,对报表也有很好的支持。

支持流文档和固定 文档,对命令的支持以及对文件的无限制访问,尤其在动画、图形图像、3D、影像的支持相当好。

WPF除了在性能方面存在 着缺陷以外,其他方面可以说是做得非常优秀。

相似的技术

WPF:使用XAML定义程序界面(如前所述,可以手工编写,可以采用 Experssion Blend等可视化工具编写),再用.NET语言(C#, VB.Net等)编写相应的逻辑代码。

逻辑代码既可以直接嵌入XAML文件中,也可保存为独立的代码文件

桌面应用程序和Web应用程序

一套编码,桌面应用程序与Web应用程序均可运用。

WPF不仅使美化、多样化了桌面应用程序,也是使Web变得异彩纷呈。WPF使3D进 入Web成为可能。比如,你可以使用矢量图形设计软件(Illustrator, CorelDraw等, 微软也有了!叫“Expression Designer”)设计好图片,然后将图形输出或导出成为XAML格式。然后,你可以在Blend中打开XAML文件,制作成动画,最后生成的也是 XAML。通过.Net语言(如C#)进行编程,还可以控制这些XAML。

WPF与WinForm、silverlight区别

WPF技术比WinForm技术更先进,来取代WinForm技术的。

silverlight是简版的WPF,silverlight只可用于给WEB应用程序添加动态内容。WPF则可以编写在跨越WEB和桌面的应用程序


Windows Forms在底层使用的是GDI+。GDI+是GDI的“面向对象包装”,C++实现。Windows Forms应用程序的GDI+,在C++实现的非托管代码之上又包了一层,从而让我们能使用C#这样的托管编程语言调用GDI+功能绘图。

WPF底层使用的是DirectX,就是通常用来开发游戏的那个DirectX。

Silverlight在API层可以看成是WPF的子集,除了这点之外,Silverlight与WPF无任何联系。Silverlight应用程序不依赖于.NET Framework,用户计算机、手机安装有Silverlight运行环境(比如浏览器添加了Silverlight插件),即可运行Silverlight应用程序。Silverlight运行时环境在API层面也可以看成是标准.NET Framework的功能子集,但它是重新写过的,独立于标准的.NET Framework。

Windows Forms/WPF/Silverlight这三者是独立发展的三个技术领域。微软出于方便开发的目的,有意让Silverlight与WPF在应用层面开发体验(甚至包括大部分应用层代码)高度一致。


开发角度


Windows Forms成熟,拥有大量的第三方控件等资源,如果开发“标准”与“通用”界面类型的Windows应用程序,使用它可以获得较高的开发效率和不错的运行性能。

WPF的开发非常“个性化”的Windows应用程序,实现你所能“梦想”到的各种用户界面,且在动画等多媒体方面,WPF优于Windows Forms。WPF的数据绑定机制也比Windows Forms要强大和灵活。

Windows Forms和WPF主要用于开发桌面应用程序,Silverlight主要战场是互联网,通常用它来开发RIA的互联网应用程序,或者手机等智能移动设备上的应用程序。

会WPF,不费太多力气,就可以转去开发Silverlight应用程序,两者相似,特别是界面层代码,由于都使用XAML,这使我们可以比较容易地为某一应用程序同时开发“桌面版”、“手机版”和“浏览器版”三种版本,而这三种版本其用户界面都可以拥有一致的外观和用户使用体验。


比较


WPF对计算机硬件的要求较高,对于硬件配置较低的计算机,其运行性能不如Windows Forms版本,对内存也是有要求的。随着计算机硬件的性能提高,差距会越来越小。

界面的执行效率:WinForm优于WPF

开发效率: WPF优于WinForm,WPF实现 UI与逻辑分离,适合团队开发,而且在维护成本低。

开发成本,WPF高于WinForm

美观度:WPF优于WinForm

范围应用:WPF优于WinForm


WPF比WinForm的较好的特性


什么是Window Handle?(句柄)

答:Handle是Windows操作系统中的一个概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等)且资源都有标示号,创建这些资源时系统会为它们分配内存,返回资源的标示号,即句柄。句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。句柄是和对象一一对应的32位无符号整数值


一、解决Window Handle问题


 原因:  在Windows GDI或WinForm开发中复杂的GUI应用程序,使用的大量的控件,如Grid等。每个控件或Grid cell都会是一个小窗口,会使用一个Window handle,尽管控件厂商提供了很多优化办法,但还是会碰到Out of Memory或"Error Create Window handle",而导致程序退出。

WPF解决方式

WPF改变了控件显示的模式,控件不再使用窗口,也就不会占用Window handle。

理论上,如果一个WPF只有一个主窗口的话,WPF只会使用一个Window handle(如果忽略用于Dispatcher的隐藏窗口的话)。所以WPF GUI程序不会出现Window handle不够用的情况。


二、线程问题


在WinForm程序开发时,因worker线程修改控件的属性而导致程序崩溃,这种非法操作并不是每次都失败。WinForm控件提供了InvokeRequired属性来判断当前线程是不是控件创建线程。但是当控件树很深时,属性会比较慢。

WPF开始设计的时候,就考虑到了多线程的问题。WPF类基本继承于DispatcherObject DispatcherObject实际就是对Dispatcher的一个简单封装。Dispatcher提供了类似InvokeRequired的方法(CheckAccess)。此方法只比较线程的ID,速度比较快。另外,Dispatcher提供了优先队列,异步调用,Timer等功能,简化了开发多线程GUI程序。


三、控件的Composition


在WinForm如果要实现一个有Checkbox的下拉菜单,将不得不处理复杂的Window消息。

通过WPF控件的Content Model和Layout系统,WPF控件可以包括任何类型的控件,甚至.Net CLR对象。有了这个基础,开发新的WPF控件更加简单了。


四、XAML


通过XAML,可以用文本的方式描述复杂的Object Graph。通过Command,Routing Event等机制,界面设计人员和程序员清楚的进行了界限。


五、Dependency Property


在WinForm开发中,一个控件的值变了,其他控件也会跟着改变。解决办法是通过写代码或通过数据绑定,通过写代码是界面和代码没法分开,后者还不够灵活。

WPF在这方面通过XAML可以简单的把相关的属性联系起来,通过Extension可以实现复杂的绑定关系。

总结

不管是WinForm还是WPF都是可以进行很好的桌面程序的开发,各自有自己的特点。

如果你对UI要求不是很高,想追求性能好一点那就用WinForm

如果想做的非常美,那就用WPF,而且WPF也可进行Web开发。如果有WPF网页开发需求,可以尝试转换平台到Silverlight

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,757评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,478评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,540评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,593评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,903评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,329评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,659评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,383评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,055评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,337评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,864评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,227评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,820评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,999评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,750评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,365评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,260评论 2 258

推荐阅读更多精彩内容