您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据挖掘与识别 > 深入浅出WPF全系列教程及源代码
深入浅出WPF全系列教程及源代码前言:WPF之What&Why微软Windows操作系统已经成功推出10多年,在WIndow系统中从事图形界面(GraphicUserInterface,GUI)的开发程序员数不胜数,GUI程序员们手中的开发工具经历了Win32API------MFC(及同类软件产品)--------ActiveX/COM/Visualbasic------Winform的变迁,每一次变迁都使得开发效率和质量产生飞跃。从2007年开始,微软推出新一代GUI开发工具WindowPresentationFoundation(直译为Windows表示基础,WPF),并且把WPF作为未来10年Windows平台开发GUI的主要技术。时至今日,不仅WindowsVista、Windows7、WindowsServer2008、WindowsServer2008R2等系统已经无缝集成了WPF,连VisualStudio2010等重要产品已使用WPF进行开发,可见微软在WPF技术方面的务实和创新。什么是WPF?WPF是WindowsPresentationFoundation的简称,顾名思义是专门用来写程序表示层的技术和工具。WPF的功能?WPF的功能是用来编写应用程序的表示层,至于业务逻辑层和数据层也有专门的新技术,比如业务逻辑层的新技术WCF(WindowsCommunicationFoundation)和WF(WindowsWorkflowFoundation)。微软用于表示层开发的技术不算少,包括WPF,WindowsForms,ASP.NET,Silveright等。换句话说,无论使用哪种技术做为表示层技术,程序的逻辑层和数据层都是相同的。WPF和Silveright的关系目前,.NET开发人员学习WPF回报是非常高的,原因是在微软整个新一代开发框架都能看到它的影子,微软新一代开发技术框架包括WindowsPresentationFoundation(WPF),WindowsCommunicationFoundation(WCF),WindowsWorkflowFoundation(WF),在后续的文章中我们会专注于将WPF,而WCF的用途是编写分布式应用程序的业务逻辑层,并以网络服务的形式暴露给客户端的服务消费者,基于WCF和EntityFramework的WCFDataService和WCFRIAService是微软迄今最佳的数据访问层,而这一数据的最佳消费者就是WPF和Silveright,所以学习WPF技术会给WCF的学习锦上添花。WF的主要作用是设计工作流,而设计工作流的编程语言正是WPF中界面编程语言----XMAL,学习完WPF,WF也就会了一小半。如果说学习完WPF完成以后就学会了一小半的WF,那么学习完WPF以后,Silveright也就学会了80%,为什么这么说呢?因为微软原本定义Silveright是WPF的子集,是WPF的网络版(Silveright的开发代号为WPF/E,意为WPF简化版)。为了让WPF的浏览器跑出来,微软所做的事情就是在技术原理不变的情况下对WPF进行瘦身------去掉一些不常用的功能,简化一些功能的实现,对多组实现同一目的类库进行删减,只保留一组,在添加一些网络通信功能,通过以下这张表,可以看到Silveright和WPF的技术重叠率之高:如今Silveright炙手可热的另一个原因是微软上一代手机平台WindowsPhone7也采用它来作为开发平台(此前的WindowsMobile使用的简化版的WindowsForm作为开发平台)。WIndowsPhone7中运行Silveright与浏览器中运行Silveright别无二致,因此学习完WPF之后,手机平台上的程序也会写了。当然,WindowPhone8将继续支持这项技术。为什么要学习WPF?许多朋友也许会问:既然表示层技术那么多,为什么还要推出WPF作为表示层技术呢?我们话精力学习WPF有什么收益和好处呢,这个问题我们从两个方面进行回答。首先,只要开发表示层程序就不可避免的要和4种功能性代码打交道,他们分别是:数据模型:现实世界中事物和逻辑的抽象。业务逻辑:据模型之间的关系和交互。用户界面:由控件构成,于用户进行交互的界面,用于把数据展示给用户并响应用户输入。界面逻辑,控件与控制之间的的关系和交互。这4种代码的关系如图2所示:在保持代码可维护性的前提下,如何让数据能够顺畅的到达界面并灵活显示,同时方便的接收用户操作,历来是表示层开发的核心问题,为此,人们研究出了各种各样的设计模式,其中经久不衰的MVC(Model---View----Controler)模式,MVP(Model----View----Presenter)模式等。在WPF出现之前,Winform,Asp.net都采用”事件驱动“理念,这种由”事件----订阅-----事件处理器“关系交织在一起构成程序,尽管可以使用MVC,MVP模式,但一不小心就将界面逻辑和业务逻辑纠缠在了一起,造成代码复杂难懂,Bug难以排除。而WPF则是微软在开发理念上的一次升级-----由”事件驱动“变成了”数据驱动“。数据驱动时代,用户每进行一个操作会激发程序发生一个事件,事件发生以后,用于响应事件的事件处理器就会执行,事件处理器是一个方法(函数),在这个方法中,程序员可以处理数据或调用别的方法,这样,程序就在事件的驱动下向前执行。可见事件驱动的数据是静态的,被动的;界面控件是主动的,界面逻辑和业务逻辑之间的桥梁是事件。而数据驱动正好相反,当数据发生改变的时候会主动通知界面控件,推动控件展示最新的数据;同时用户的操作会直接送达数据,就好像控件是”透明“的。可见,在数据驱动理念里,数据占主导地位,控件和控件事件被弱化(控件事件一般只参与界面逻辑,不再染指业务逻辑,使得程序复杂度得到有效的控制)。WPF中,数据与控件的关系就是哲学中内容与形式的关系,内容决定形式,所以数据驱动界面,这非常符合哲学原理,数据与界面间的桥梁就是数据关联(DataBinding),通过这个桥梁,数据可以流向界面,再丛界面流向数据源。简而言之,WPF的开发理念更符合自然哲学的思想。使用WPF进行开发较之WInform开发要简单,程序更加简洁清晰。其次,微软将WPF理念扩展到几乎所有的开发平台,包括桌面平台,浏览器平台,手机平台。WPF的完整版可以运于在Windows下开发下的桌面应用程序(当然,这些应用程序也可以在浏览器中运行。)WPF的简化版Silveright,不但可以编写运行于浏览器中的富客户端程序(RichInternetApplication),也可用于编写微软手机平台中的软件,所以这些程序的开发理念都是一样的,仅在类库方面有一些差别,也就是说,学会WPF开发,Silveright和WindowsPhone软件都可以触类旁观,投入这些精力是值得的。WPF之XMAL----XMAL概览微软为了把开发模式从网络开发移植到桌面开发和富媒体网络程序的开发上,微软创造了一种新的开发语言------XMAL(读作ZAML),XAML全称ExtensibleApplicationMarkUpLanguage。即可扩展应用程序标记语言。它在做桌面开发和富媒体网络程序开发中扮演HTML+CSS+JS的角色,成为设计师和程序员沟通的枢纽。现在设计师和程序员一起工作,共同维护软件的版本,只是他们使用的软件不一样----设计师使用Blend(Expression设计套件工具中的一个)来设计UI,程序员使用VisualStudio开发后台逻辑应用代码。Blend就像PhotoShop等设计工具,因此可以最大限度的发挥设计师的特长。使用它,设计师不仅可以设计出绚丽多彩的UI,还可以让UI上包含动画-----虽然程序员也可以做到这些,但从专业性,时间开销以及技术要求上显然是划不来的。更重要的是,这些绚丽的UI动画都会以XMAL的形式直接保存进项目,无需转化就可以直接编译,节省了大量的时间和成本。XAML的优点:XAML可以设计出专业的UI和动画----好用。XAML不需要专业的编程知识,它简单易懂、结构清晰-----易学。XAML能使设计师直接参与软件开发,随时沟通、无需二次转化-----高效XAML这位翩翩君子的才华可远不止于这些。自从应用程序从控制台界面(ConsoleUserInterface,CUI)升级为图形界面(GraphicUserInterface)后,程序员们就一直追求视图(View,即UI)和业务逻辑的分离。以往的开发模式中,程序员很难保证用来实现UI的代码完全不与用来做业务逻辑处理的代码纠缠在一起。UI代码和业务逻辑代码纠缠在一起通称为UI和逻辑的紧耦合,它往往带来以下后果:无论是软件的功能还是UI的设计有所变化或者是出现Bug,都将导致大量代码的修改。会使得逻辑代码更加难以理解-------修改往往比重写更困难,因为在修改之前必须要先读懂。重用逻辑代码编程了MissionImposible。XAML的另外一个大优点就是:它帮助开发团队真正的实现了UI和业务逻辑的剥离。XMAL是一种单纯的声明型语言,这就是说它只能用来声明一些UI元素、绘制UI和动画(在XMAL中实现动画是不需要编程的),根本无法在其中加入程序逻辑,这就强制的把逻辑代码从UI中赶走了。这样,与UI相关的元素统统集中在程序的UI层,与逻辑相关的代码统统集中在业务逻辑层,形成了一种”高内聚--低耦合“的结构。形成这种结构后,无论是打算对UI进行较大的改动还是打算重用底层逻辑,都不会花费太大力气,这就好比你某一天给A客户做了一个桔子,A客户很喜欢,A客户将自己的产品介绍给B客户,B客户喜欢桔子的味道,但是希望它看上去像香蕉-----这时候,你只需要将桔子的皮撕下来,换成香蕉的皮就可以了,只需要少量的成本就可以获得和之前一样大的收益(对于软件的换肤功能,WPF提供了强大的Template功能,将在后面详述)WPF之从0开始学习XMAL剖析最简单的XMAL代码:[html]viewplaincopyprint?1.Windowx:Class=WpfApplication2.Window22.xmlns=:x==Window2Height=300Width=3005.Grid6.7./Grid8./Window花花绿绿一大片,还有两个像主页地址的东西....它们都是些什么呢,让我们一个个来分析。XAML是由XML派生出来的语言,所以有很多在XML中的概念在XAML中是通用的。比如使用标签声明一个元素(每一个元素对应内存中的一个对象)时,需要使用其实标签tab和结束标签/tag,夹在起始标签和终止标签中的XAML代码表示隶属于这个标签的内容。如果没有什么类容隶属于这个标签,可以写为tag/。为了表示同类标签中的某个标签的与众不同,可以给它的特征(Attribute)赋值。为特征赋值的语法如下:非空标签:tagAttribute1=value1Attribute2=value2content/tag空标签tagAttribute1=value1Attribute2=value2/在这里有必要把Attribute和Property仔细地辨别一下。这个词的混淆由来已久,混淆的主要原因是大多数的中文译文里即把Attribute译为“属性”,也把Property译为“属性”,其实,这两个词表示的不是同一个层面上的东西。Property属于面向对象的范畴。在使用面向对象编程的时候,常常需要对客观事物进行抽象,在把抽象出来的结果封装成类,类中用来表示事物状态的成员就是Pr
本文标题:深入浅出WPF全系列教程及源代码
链接地址:https://www.777doc.com/doc-6288907 .html