欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    Web开发框架高级WPF第一章.ppt

    • 资源ID:6523334       资源大小:1,007.01KB        全文页数:66页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Web开发框架高级WPF第一章.ppt

    1,Web开发框架高级技术WPF专业编程指南,理工大学华信软件学院 张一鸣2012年1月10日,课程代号:1969146,2,本课程教学计划,课程代号:1969146课程学分:8分课程课时:128课时,其中理论课64,实验课64。课时分配:第一编(1 5章):理论课时12,实验课时12;第二编(612章):理论课时30,实验课时30;第三编(1315章):理论课时16,实验课时16;第四编(1617章):理论课时 4,实验课时4;总复习:4课时。,3,第1章 WPF专业编程指南,理工大学华信软件学院 张一鸣2012年1月10日,Web开发框架高级技术,4,本章主要内容,什么是WPF(视窗演示基础)?GUI的发展简述WPF在软件开发中的作用WPF的体系架构WPF的核心类的层次结构WPF应用程序的创建WPF应用程序的启动与终止,5,1.1 什么是WPF?,WPF是Windows Presentation Foundation的简称,中文的含义是视窗演示基础,顾名思义是专门用来编写程序表示层的技术和工具。用WPF建立图形用户界面是微软公司的新框架、新技术,WPF是针对.NET而设计的,它受现代显示技术(如HTML和Flash)和硬件加速技术的影响,代表了当前世界计算机软件技术的最新发展方向。WPF用于二维和三维图形、动画、音频与视频技术。,6,1.2 GUI的发展简述,自古以来,生产工具就代表着生产力的先进程度生产力的发展要求人们不断研发出新的生产工具,新生产工具的诞生又使生产效率出现飞跃。作为劳动生产的一种,计算机软件开发也需要工具,随着程序员手中的工具越来越强大,软件开发的效率和质量也越来越高。早期的计算机软件都是纯粹的字符界面的,也就是人们凭借事先培训学会的字符命令行输入给电脑,电脑再把计算的结果以字符串的形式显示给用户。这样的结果是学习难,使用难,阅读难,不宜推广。,7,GUI的发展简述(续一),20世纪80年代,人们意识到字符界面软件的缺陷,开始探索在计算机软件中使用图形用户界面(Graphic User Interface)。美国Xerox公司PARC实验室首先进行了这方面的实验。美国苹果公司在其新开发的Machtoish微型计算机的操作系统中采用了这种GUI技术并获得了巨大的成功。这些成功促使微软公司在上世纪80年代中晚期开始构建自己的GUI平台,即Windows 1.0,但是并不成功。直到1990年微软发布Windows 3.0之前,这个GUI平台都未得到广泛的应用。,8,GUI的发展简述(续二),1990年微软推出Windows 3.0终于获得成功,而GUI平台是这种成功的基础保障。这个GUI平台由两个动态链接库(DLL)组成,即User和GDI。但是这个GUI平台的使用还是比较麻烦的。1991年微软公布了Visual Basic 1.0,它构建于User和GDI之上,并提供了一个简化的编程模型UI。内部外号为“Ruby”的UI的使用比原来的Windows API要简单的多,受到很多程序员的欢迎,也使得VB的使用量大涨。,9,APIGUI的发展简述(续三),当程序员在Windows环境下开发应用程序时,会需要使用到各种Windows的资源,如读写磁盘文件,实现网络通信等。为此,微软提供了一个应用程序编程接口API(Application Programming Interface),给应用程序开发提供了Windows操作系统支持的核心功能,主要用于C/C+语言的开发。,应用软件,API,Windows,10,APIGUI的发展简述(续四),Windows API包含了以下的功能组合:基本服务,提供对计算机核心资源的访问,例如内存、文件系统、设备、处理器和线程等。它用控件库,通过这些控件为应用程序提供统一的Windows视觉风格。通用对话框库,用于完成通用任务的对话框集合,包括打开文件和保存对话框、打印对话框等。图形设备接口(GDI),为应用程序提供在显示器、打印机及其他设备上进行图形输出的功能。网络服务,提供Windows操作系统中的各种联网功能。用户界面UI,提供一种管理机制,用于管理应用程序中的窗口与控件,以及来自鼠标和键盘等设备的输入信息。Windows外壳,用于组织和显示所有Windows用户界面的容器,包括桌面、任务栏和Windows浏览器等。,11,APIGUI的发展简述(续五),当每次发布新版本Windows操作系统时,总会修改和增加一些Windows API,微软也总是尽力保持API的向后兼容,因此许多最初的API函数在今天的Windows系统中仍然存在。Windows API主要有以下的几个版本:Win16第一个16位版本的Windows操作系统提供的API。Win32包含在Windows NT中,用于32为版本Windows的API.Win32 for 64-bit Windows以前称之为Win64,用于64位版本的Windows XP和Windows Server 2003等的API。,12,GUI的发展简述(续六),虽然早期VB的UI模型比最初的Windows API模型要简单,但是要受到许多限制,这也受到那些高级程序员的蔑视。所以专业的程序员还是直接对User和GDI进行编程,以显示自己的水平。与此同时,互联网引起了软件开发技术的巨大变革,传统的台式机窗体界面受到网页和浏览器的挑战。为应对这种挑战,微软把内部正在开发用于替代VB UI的项目“Forms3”改造成开发浏览器应用程序的平台,并命名为“Trident”(其目前的正式产品名为MSHTML.dll)。Trident促进了具有丰富文本布局、标记和脚本支持的HTML特定引擎的发展。,13,GUI的发展简述(续七),几乎同时期的另一个重要事件是,美国Sun公司于1994年引入的JAVA第一次让大批程序员接受了虚拟机的概念并掌握了微软在VB中引入的代码托管技术。这使代码托管成为一种业界的主流和时尚的技术。为此,微软于2002年发布了自己的通用托管代码平台.NET Frame-work。包含在其中的Windows Forms是一个针对User32和GDI+(GDI32的升级版本)的托管代码API。Windows Forms被用于代替VB中旧的“Ruby”窗体开发包。,14,关于代码托管,在.NET框架里支持的所有开发语言如C#,VB等都使用相同的一套公共语言运行库CLR。以运行库为目标的代码称为托管代码(managed code)。而不以运行库为目标的代码称为非托管代码。一个应用程序可以单独采用托管代码进行构建,完全依赖CLR以及.NET框架类库的相关部分。一个应用程序也可以联合采用托管代码与普通非托管代码进行构建,必要时两者交互作用。一个托管对象能使用另一个托管对象,即使它们用不同语言编写。这正是.NET 框架类库成为有效的基础设施的关键原因。,15,托管与非托管代码的特点,Windows操作系统,CLR,.NET框架类库,托管代码,CLR,.NET框架类库,托管代码,非托管代码,只使用托管代码 的应用程序,同时使用托管代码和非 托管代码的应用程序,16,GUI的发展简述(续八),1995年,微软的几个程序员自主开发了用于深入控制硬件以提高处理图形速度的DirectX,随后该产品得到公司的大力支持经过数年发展,成为一种支持显卡提供复杂纹理、特殊效果和三维图形的硬件加速功能的优秀软件包。进入新千年后,微软拥有4个主要的UI平台:User32/GDI32、Ruby、Trident和Windows Forms。这些技术解决了不同方面的问题,具有不同的编程模型,被不同的用户群所使用。可是这4项主要的UI技术里没有一种能够利用DirectX技术,且这4种UI都不能提供类似现代视频游戏的独特视频播放能力,也缺乏多媒体、动画的能力。,17,GUI的发展简述(续九),这四个平台彼此独立,各自满足一部分客户的需求,要混合与配合这些平台中的各个部分技术非常困难且容易出错,而且需要保持4个各自独立的开发团队,重复大量的投资,其核心技术也有很多重复,造成大量的重复浪费。,User32/GDI32,Ruby,Trident,Windows Forms,18,GUI的发展简述(续十),2001年,微软成立了一个新团队(Aralon)以便创建一个统一的界面展示平台,最终代替微软现存的4个UI平台,并且能够充分利用DirectX技术,为用户提供一个面向未来、适应互联网与移动的全新的界面显示开发平台。在2003年,这个团队的开发成果被微软作为Aralon发表,后来,进过几次改进,该项目被正式命名为WPF视窗演示基础。,User32/GDI32,Ruby,Trident,Windows Forms,DirectX,WPF,19,GUI的发展简述(续十一),经历了近20年的Windows开发和约10年的Web开发,GUI程序员们手中的开发工具也经过几次变迁(每一次变迁都使得程序的开发效率和质量产生飞跃),从2007年开始,微软推出了全新一代的GUI开发工具WPF,并且把WPF定义为未来十年Windows平台GUI开发的主要技术,也是微软.NET架构在台式机、Web网页和移动处理技术领域唯一通用的展示技术开发平台。时至今日,微软的新一代产品包括Windows Vista、Windows 7、Windows Server 2008、Windows 8、Visual Studio 2008和2010以及移动操作系统平台Silverlight等都全部采用了WPF。,20,.NET各个版本的关系,NET 2.0CLRWinFormsWebServicesASP.NET,NET 3.0,WCF WF WPF,CardSpace,LINQ AJAXREST,NET 3.5,.NET 2.0是整个.NET的核心.NET3.0是在.NET 2.0的基础上增加了WPF、WCF、WF、CardSpace等跟Vista有关的组件.NET 3.5除了包含.NET 3.0的全部功能外,增加了对LINQ、Ajax等技术支持的全新框架库和编译器,21,1.3 WPF在软件开发中的作用,WPF在程序开发中起什么作用呢?一个实例,一家医疗单位的技术主管找到我说:“你能不能用WPF为我们开发一套业务管理系统呀?”其实,这就是一个对WPF典型的误解。误解在何处?主要是没弄清WPF的功用。当今的软件应用程序,除了一些非常小巧的实用工具外,绝大部分程序都是多层架构的程序,一般至少包含3层:数据层、业务逻辑层和表示层,它们之间的关系如下图所示。,22,应用程序三层体系结构示意图,数据库,业务逻辑处理,数据层,业务逻辑层,表示层,手机程序,桌面程序,浏览器程序,用户,23,多层架构中各层的功能,数据层:用于存储数据,多由数据库构成,有时候也用数据文件辅助存储数据。比如医院的药品列表、人员列表、病例列表等都存储在这一层。业务逻辑层:用于根据需求使用计算机程序表达显示的业务逻辑。比如哪些医生可以给哪类病人看病,从挂号到取药的流程,从住院到出院的流程等,都由这层来实现。这层一般都是通过一组服务(Service)向表示层公开自己的各个功能。它所需要的数据则到数据层寻找,这项工作由它自己附设的数据访问子层(DAL)来专门处理。,24,多层架构中各层的功能(续一),表示层:负责把数据和流程展示给用户看。对于同一组来自业务逻辑层的数据,可以选择多种表达方式。比如,对于同一张药品单,可以用短信的形式提供给客户;如果客户想打印药品单的详细内容,可以用表格的形式来表达;如果客户想直观地看到每种药品占总价格的比例,又可用饼图来表达。除了用于表示数据,表示层还负责展示流程、响应用户操作等。表示层程序可以在桌面程序、浏览器程序、手机程序或各种智能设备中运行,所以也被称为客户端程序。,25,专门编写表示层的WPF,WPF的功能就是用来编写应用程序的表示层,至于业务逻辑层和数据层的开发也都有专门的新技术,比如业务逻辑层的新技术是WCF(Windows Communication Founda-tion)和 WF(Windows Workflow Foundation);数据层的新技术是LINQ(Language Integrated Query)。目前微软另一个热门技术Silverlight是WPF的一个子集,专门用于移动和嵌入式开发平台。学会了WPF,也就至少学会了它的80%。而且,学会了WPF也就基本掌握了约一半的WCF和WF。,26,为何要学习WPF?,有人会问:既然已经有这么多表示层技术,为什么还要推出WPF技术呢?我们花精力学习WPF技术有什么收益和好处吗?可以从一下两方面来回答这些问题。,27,为何学习WPF(一),首先,只要开发表示层程序就必须与四种功能性代码打交道,即:数据模型:显示世界中事物和逻辑的抽象业务逻辑:数据模型之间的关系与交互用户界面:由控件构成的、与用户进行交互的界面,用于把数据展示给用户并响应用户的输入界面逻辑:控件与控制之间的关系与交互。这四种代码的关系见下图所示。,28,编程中四种代码的关系,用户界面,数据模型,业务逻辑,界面逻辑,在保持代码可维性前提下,如何让数据能顺畅到达界面并灵活显示,且能方便接收用户输入是表示层开发的核心技术。人们研究了MVC和MVP等模式。在WPF出现之前,Windows Forms和ASP.NET都使用“事件驱动”概念,即“事件订阅事件处理器”方式,使用MVC和MVP模式仍会使界面逻辑与业务逻辑纠缠在一起。而WPF则是开发理念上的升级,由事件驱动变为数据驱动。,29,为何学习WPF(二),在事件驱动时,用户每进行一个操作会激发程序发生一个事件,事件发生后,用于响应事件的事件处理器(一个方法或函数)就会执行,在这个方法中程序员可以处理数据或调用别的方法,这样,程序就会在事件的驱动下向前执行了。可见,事件驱动时代的数据是静态的、被动的;界面控件是主动,界面逻辑与业务逻辑之间的桥梁是事件。,30,为何学习WPF(三),WPF提出的数据驱动正好于此相反,当数据发生变化时,会主动通知界面控件、推动控件展示最新的数据;同时,用户对控件的操作会直接送达数据,就好象控件是“透明”的。所以,在数据驱动理念中,数据占主动地位、控件和控件事件被弱化。在WPF中,数据与界面的关系就是哲学中的内容与形式的关系内容决定形式,所以数据驱动界面,这非常符合哲学原理。数据与界面之间的桥梁是数据关联(Data Binding),通过这个桥梁,数据可以流向界面,再从界面流回数据源。,31,为何学习WPF(四),其次,微软已经把WPF的理念扩展到了几乎全部开发平台,包括桌面平台、浏览器平台和手机平台以及其他嵌入式设备平台。WPF也是目前乃至今后相当长一段时间内微软唯一打算倾全力投资支持的展示技术开发平台。而从微软目前在软件界的霸主地位来看,熟练掌握了WPF开发技术就意味着在整个软件行业有了畅通无阻的通行证,也有了高水平和高待遇的程序员的资格证。,32,1.4 WPF的体系架构,WPF使用多层体系结构。在顶层,应用程序和一个完全由托管的C#代码编写的高层服务集合交互。绘制图形的Direct3D纹理和三角形模块是其底层。中间层是媒体集成层。至于将.NET对象转换为Direct3D纹理和三角形的实际工作,在后台是由一个名为milcore.-dll的低级非托管组件完成的。,33,WPF的体系架构示意图,Direct3D,User32,底层,milcore.dll,WindowsCodecs.dll,媒体集成层,PresentationCore.dll,WindowsBase.dll,托管的WPF API,PresentationFramework.dll,milcore.dll,PresentationCore.dll,WindowsBase.dll,WindowsCodecs.dll,milcore.dll,PresentationCore.dll,WindowsBase.dll,Direct3D,WindowsCodecs.dll,milcore.dll,PresentationCore.dll,WindowsBase.dll,User32,Direct3D,WindowsCodecs.dll,milcore.dll,PresentationCore.dll,WindowsBase.dll,34,WPF的关键组件(一),PresentationFramework.dll包含了WPF顶层的类型,包括那些表示窗口、面板以及其它类型的控件。它还实现了高层编程抽象,如式样。开发人员直接使用的大部分类都来自这个程序集。PresentationCore.dll包含了基础类型,如UIElement类和Visual类,所有的形状类和控件类都继承自这两个类。WindowsBase.dll包含了更多基本的组成部分,这部分具有在WPF之外重用的潜能。如DispatcherObject类和DependencyObject类。,35,WPF的关键组件(二),milcore.dll是WPF渲染系统的核心,也是媒体集成层的基础。它构成了将可视化元素转换为Direct3D所期望的三角形和纹理的引擎。WindowsCodecs.dll是一套提供图像支持的低级API(例如,处理、显示以及缩放位图与JPEG图像)。Direct3D是一套低级API,WPF中所有的图像都由它渲染。User32用于决定哪些程序实际占有桌面的哪一部分。所以它仍然被包含进WPF中,但是不再负责渲染通用控件。,36,WPF的关键点,在WPF中,是由Direct3D渲染所有的图形。不管是使用简单的显卡或是使用功能更加强大的显卡,不管是基本控件还是绘制更加复杂的内容,也不管是在什么操作系统上运行应用程序,甚至普通的二维图形和文本也被转换为若干基本三角形并被传送到Direct3D引擎并显示出来,而不是使用以前的GDI+或User32来渲染图形。这使得图形的质量达到一个很精细的高水平。,37,1.5 WPF的核心类的层次结构,构成WPF基本控件集合的类大约有十个,它们是由一个基本类派生出来的,了解它们的类的层次派生结构是非常必要的。WPF的核心名称空间从System.Windows开始,如System.Windows,System.Windows.Controls和System.Windows.Media等。唯一例外的是由System.Windows.Forms开始的名称空间,它是Windows窗体工具包的一部分。,38,WPF的核心类和其层次结构,ItemControl,ContentControl,Control,FrameworkElement,UIElement,Visual,DependencyObject,DispatcherObject,Shape,Panel,抽象类,具体类,图例,39,WPF核心类的说明,System.Threading.DispatcherObject类:WPF应用程序使用单线程亲和模型,整个用户界面由一个单独的线程所有,每个WPF应用程序由一个协调消息(从键盘输入、鼠标移动到框架处理,如布局)的调度程序(Dispatcher)管理。System.Threading.DependencyObject类:在WPF中,和屏幕上的元素进行交互的主要方式是通过依赖项属性(Dependency property)特性,这种特性靠继承此类来实现。System.Threading.Media.Visual类:在WPF应用程序中显示的每个元素,在本质上都是一个Visual对象。可以将Visual类看作是一个图形对象,它封装了绘图指令、绘图的细节描述以及基本功能。,40,WPF核心类的说明(续一),4.System.Threading.UIElement类:UIElement类为WPF的本质特征提供支持,如布局、输入、焦点以及事件。例如,测量和排列这两步在该类中进行处理。5.System.Threading.FrameworkElement类:此类是WPF核心继承树中的最后一站。它实现了一些由UIElement类定义但是没有实现的成员。例如,UIElement类为WPF布局系统设置变换,而FrameworkElement类提供了支持变换的关键属性,像Horrizonal Alignment和Margin属性。System.Threading.Shapes.Shape类:在WPF中定义的基本形状类如Rectangle、Polygon、Ellipse、Line和Path等类都继承自该类。,41,WPF核心类的说明(续二),System.Threading.Controls.Control类:在WPF中定义的控件Control是和用户交互的元素。System.Threading.Controls.ContentControl类:在WPF中定义的ContentControl类是所有具有单一内容控件的基类。包括从简单的标签到窗口的所有内容。System.Threading.Controls.ItemsControl类:Items-Control类是所有显示选项集合的控件的基类,例如ListBox和TreeView控件。System.Threading.Controls.Panel类:Panel类是所有布局容器的基类,布局容器是一个可以包含一个或多个子元素,并根据指定的规模对子元素进行排列的元素。,42,1.6 WPF应用程序的创建,在Windows操作系统中,所有的应用程序都在自己独立的进程中运行,WPF也是如此。每个进程都有自己独立的内存地址,进程间的数据是隔离的,进程之间不会互相影响。当应用程序创建进程时,同时创建一个或多个属于该进程的线程。这些线程在自己的进程空间中运行。在底层,WPF仍然使用Windows的消息驱动机制来实现事务处理。,43,WPF对应用程序的统一,当前计算机应用程序的人机界面(UI)主要分为三类:桌面(Desktop)应用程序、互联网(Web)应用程序和移动智能终端应用程序。WPF首次实现了对前两类应用程序的统一编程,而WPF的子集Silverlight也实现了对移动终端的应用程序的编程。,UI表示层,手机程序,桌面程序,浏览器程序,Silverlight,WPF,用户,44,WPF创建时涉及到的类,WPF程序涉及到三个最重要的类:ApplicationWindowPage创建WPF应用程序首先从Application类开始。这要利用微软的Visual Studio 2008(或2010)。,45,创建WPF程序生成的文件,创建每个WPF程序时,系统自动生成四个文件:App.xaml定义Application对象及其设置,其中最重要的设置是StartupUri属性,定义载入程序时首先执行的XAML文档(默认为Window1.xaml);App.xaml.cs是其代码后类,处理程序层的事件(代码后类的文件名总是相关XAML文档名加上文件扩展名cs;Window1.xaml定义程序窗口;Window1.xaml.cs是其代码后类,处理窗口的事件。,46,WPF应用程序的创建,创建WPF程序,在Visual Studio 2008集成开发环境(IDE)中选:文件菜单“新项目”“新项目”对话框中的模板类型 WPF应用程序。系统就会自动建好我们需要的WPF程序框架。WPF程序的IDE和Windows窗体的IDE类似,也有工具箱、设计视图、解决方案资源管理器和属性窗口。这样进入的是XAML视图,在打开XAML文档时出现。这个视图链接设计视图和属性窗口。,47,从文件菜单选择建立新项目,48,从建立新项目窗口选择WPF应用,49,50,例子1.1 一个简单的WPF程序,本应用程序创建一个管理WPF桌面应用程序的Window类实例,其Title属性就是窗口标题,Content属性是窗口中要显示的内容,调用窗口类的Show()方法在屏幕上显示所创建的窗口,最后又创建了Application类实例,并调用其Run()方法,该方法创建了一个消息分配机制,能接收操作系统发给应用程序的消息,并对相应的消息进行响应。本程序中引入了两个.NET中的命名空间:System(提供.NET的基本服务)和System.Windows(提供WPF的基本服务),微软把WPF所用的类,都放在此命名空间下,如Sys-tem.Windows.Controls等。,51,例子1.1的程序代码(.cs文件),using System;using System.Windows;namespace Yingbao.Chapter1 public class DesktopApp:Application STAThread public static void Main()Window1 win=new Window1();win.Title=WPF application;win.Content=Hello WPF!;win.Show();Application app=new Application();app.Run();,Application类的派生类,所有WPF程序,都必须在单一线程STA模型中运行,52,例子1.1的简单分析和运行结果,程序中的Main函数是WPF程序的入口点,必须是静态的,该函数前有STAThread属性,表示本程序满足所有WPF程序都必须在单一线程模型STA中运行的特点,也就是UI不能在多线程的环境中运行。若不调用Window类中的Show方法,直接调用app.Run(win)方法,则由Run方法自动调用win.Show()方法。,53,Dos窗口,当用Visual Studio 2008创建WPF应用程序时,乐意设置所创建的应用程序是为带有Dos窗口的应用程序,还是桌面应用程序。方法如下:在VS 2008中,选择要设定的项目,单击鼠标右键,选择“属性”,会弹出下面的窗口。在其中中部右侧的“输出类型”的下拉控件里,有三项选择:Console Application、Windows Application和Class Library。,54,选定项目,当用Visual Studio 2008创建WPF应用程序时,可以设置所创建的应用程序是为带有Dos窗口的应用程序,还是桌面应用程序。方法如下:在Console Application、Windows Application和Class Library中选定某一项。若选择Console Application,则WPF不阻止用户创建窗口,而是在创建桌面窗口的同时创建Dos命令行窗口。,55,选择输出类型,56,Dos命令行窗口的调试,使用Dos命令行窗口用来调试程序非常方便,比如在上面的这段程序里加入ConsoleWriteLine(“”),则这些信息会在Dos命令行窗口显示。当调试好WPF程序后,再把输出类型改为Windows Application。如果项目是要创建一个类库,就要把输出类型改为Class Library。在一个进程中,只能创建一个Application实例,但是可以创建多个Window实例,每个Window实例就是一个可以显示的窗口。,57,例子1.1的Dos窗口运行结果,58,1.7 WPF应用程序的启动与终止,每个应用程序都在自己生存周期,在这个周期里会产生相关的事件和方法。通常在相关事件发生时,WPF会首先调用在Application类中的相应方法,然后再产生相关事件。所以,这些方法常常会有相应的事件相对应。例如,OnActivated方法和Activated事件、OnDeactivated方法和Deactivated事件等。下表列出了这些常见的方法和事件。查看WPF应用程序的启动与终止过程,有两种方法:一是从Application类中派生出自己的类,并使用虚函数覆盖技术来观察Application类在运行中调用虚函数的过程;二是处理Application类中的相关事件。,59,Application类中与应用程序生存周期相关的事件,60,例子1.2 使用XAML的声明或GUI编程,上面的例子1.1是使用C#代码来创建Application的类。实际上在WPF应用程序中更常用的是使用XAML来创建Application类实例。当选择WPF Application项目模版时,VS 2008自动创建了4个文件:App.xaml、App.xaml.cs、Window1-.xaml和Window1.xaml.cs。这4个文件移植了两个类,App.xaml、App.xaml.cs创建的是App类,它从Applica-tion类中派生出来。Window1.xaml和Window1.xaml.cs创建的是Window1类,它从Window中派生出来。,61,例子1.2 使用XAML的声明或GUI编程,XAML文档用于定义WPF程序的外观,它也是XML文档,包含许多嵌套元素,放在开始和结束标记之间。下面的例子显示“Welcome to WPF!”。,62,例子1.2简单XAML文档定义的窗口,下面的例子用简单的XAML文档定义一个窗口,并显示“Welcome to WPF!”。Welcome to WPF!,63,例子1.2 程序的简单说明,每个XAML文档要有一个根元素(本例是Window控件定义程序窗口),数据作为嵌套内容或属性。每个XAML文档要定义2个标准名字空间,即2个URN,以便XAML编译器能解释后面出现的标记。演示XAML名字空间定义为默认名字空间,标准XAML名字空间映射前缀x。当VS 2008创建WPF程序时,它们被自动放进Windows元素的开始标志中。WPF控件表示为XAML标记中的元素。如XAML文档的根元素是Window控件,定义程序窗口,对应于Windows窗体中的Form控件。,64,例子1.2 程序的简单说明(续),Window控件的开始标记还定义另一个属性x:Class,指定相关代码后类的类名,x:表示Class属性位于标准xaml空间中。利用属性可以在XAML中定义控件的属性。例如,设置Window控件的属性Height=“150”Width=“250”Title=“A Simple Window”等。Window是个内容控件,它可任意包含一个或多个子元素或文本内容。通常用布局容器作为Window的子元素,以便在其中放多个控件。Grid是Window控件下一级的控件(布局容器),内部可以放多个控件。Label也是个内容控件,用于显示少量静态信息。,65,WPF的一般布局原则,所谓布局就是确定显示窗体上的多个控件的大小和相互位置。WPF布局机制用基于流布局解决这些问题,概括为两大原则:控件大小不能显式指定,否则设计结果在一个地方很好,但是换一个地方可能就变形了。因此,除了每个属性相关联的Width和Height属性外,所有WPF控件还有MinWidth、MinHeight、MaxWidth和MaxHeight属性。如果Width和Height属性都是auto(默认值),则可以根据容器大小自动调整尺寸。,66,2.控件的位置不能定义为绝对位置,而要根据其在布局容器中的相对位置和同一容器中的其他控件相对位置来确定。所有控件有三个属性:Margin,指定控件边沿留多大空间,分为左、上、右、下四边的边距,共有4个参数:HorizontalAlignment和VerticalAlignment指定控件在布局容器中的对齐方式,前者的有效选项为Left,Center,Right和Stretch,而后者的有效选项为Top,Center,Bottom和Stretch。Stretch表示对象占用尽量大的空间。,一般布局原则(续),

    注意事项

    本文(Web开发框架高级WPF第一章.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开