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

上传人:sh****n 文档编号:8628980 上传时间:2020-03-30 格式:PPT 页数:66 大小:1,007KB
返回 下载 相关 举报
Web开发框架高级WPF第一章.ppt_第1页
第1页 / 共66页
Web开发框架高级WPF第一章.ppt_第2页
第2页 / 共66页
Web开发框架高级WPF第一章.ppt_第3页
第3页 / 共66页
点击查看更多>>
资源描述
1 Web开发框架高级技术 WPF专业编程指南 理工大学华信软件学院张一鸣2012年1月10日 课程代号 1969146 2 本课程教学计划 课程代号 1969146课程学分 8分课程课时 128课时 其中理论课64 实验课64 课时分配 第一编 1 5章 理论课时12 实验课时12 第二编 6 12章 理论课时30 实验课时30 第三编 13 15章 理论课时16 实验课时16 第四编 16 17章 理论课时4 实验课时4 总复习 4课时 3 第1章WPF专业编程指南 理工大学华信软件学院张一鸣2012年1月10日 Web开发框架高级技术 4 本章主要内容 什么是WPF 视窗演示基础 GUI的发展简述WPF在软件开发中的作用WPF的体系架构WPF的核心类的层次结构WPF应用程序的创建WPF应用程序的启动与终止 5 1 1什么是WPF WPF是WindowsPresentationFoundation的简称 中文的含义是视窗演示基础 顾名思义是专门用来编写程序表示层的技术和工具 用WPF建立图形用户界面是微软公司的新框架 新技术 WPF是针对 NET而设计的 它受现代显示技术 如HTML和Flash 和硬件加速技术的影响 代表了当前世界计算机软件技术的最新发展方向 WPF用于二维和三维图形 动画 音频与视频技术 6 1 2GUI的发展简述 自古以来 生产工具就代表着生产力的先进程度 生产力的发展要求人们不断研发出新的生产工具 新生产工具的诞生又使生产效率出现飞跃 作为劳动生产的一种 计算机软件开发也需要工具 随着程序员手中的工具越来越强大 软件开发的效率和质量也越来越高 早期的计算机软件都是纯粹的字符界面的 也就是人们凭借事先培训学会的字符命令行输入给电脑 电脑再把计算的结果以字符串的形式显示给用户 这样的结果是学习难 使用难 阅读难 不宜推广 7 GUI的发展简述 续一 20世纪80年代 人们意识到字符界面软件的缺陷 开始探索在计算机软件中使用图形用户界面 GraphicUserInterface 美国Xerox公司PARC实验室首先进行了这方面的实验 美国苹果公司在其新开发的Machtoish微型计算机的操作系统中采用了这种GUI技术并获得了巨大的成功 这些成功促使微软公司在上世纪80年代中晚期开始构建自己的GUI平台 即Windows1 0 但是并不成功 直到1990年微软发布Windows3 0之前 这个GUI平台都未得到广泛的应用 8 GUI的发展简述 续二 1990年微软推出Windows3 0终于获得成功 而GUI平台是这种成功的基础保障 这个GUI平台由两个动态链接库 DLL 组成 即User和GDI 但是这个GUI平台的使用还是比较麻烦的 1991年微软公布了VisualBasic1 0 它构建于User和GDI之上 并提供了一个简化的编程模型UI 内部外号为 Ruby 的UI的使用比原来的WindowsAPI要简单的多 受到很多程序员的欢迎 也使得VB的使用量大涨 9 API GUI的发展简述 续三 当程序员在Windows环境下开发应用程序时 会需要使用到各种Windows的资源 如读写磁盘文件 实现网络通信等 为此 微软提供了一个应用程序编程接口API ApplicationProgrammingInterface 给应用程序开发提供了Windows操作系统支持的核心功能 主要用于C C 语言的开发 应用软件 API Windows 10 API GUI的发展简述 续四 WindowsAPI包含了以下的功能组合 基本服务 提供对计算机核心资源的访问 例如内存 文件系统 设备 处理器和线程等 它用控件库 通过这些控件为应用程序提供统一的Windows视觉风格 通用对话框库 用于完成通用任务的对话框集合 包括打开文件和保存对话框 打印对话框等 图形设备接口 GDI 为应用程序提供在显示器 打印机及其他设备上进行图形输出的功能 网络服务 提供Windows操作系统中的各种联网功能 用户界面UI 提供一种管理机制 用于管理应用程序中的窗口与控件 以及来自鼠标和键盘等设备的输入信息 Windows外壳 用于组织和显示所有Windows用户界面的容器 包括桌面 任务栏和Windows浏览器等 11 API GUI的发展简述 续五 当每次发布新版本Windows操作系统时 总会修改和增加一些WindowsAPI 微软也总是尽力保持API的向后兼容 因此许多最初的API函数在今天的Windows系统中仍然存在 WindowsAPI主要有以下的几个版本 Win16 第一个16位版本的Windows操作系统提供的API Win32 包含在WindowsNT中 用于32为版本Windows的API Win32for64 bitWindows 以前称之为Win64 用于64位版本的WindowsXP和WindowsServer2003等的API 12 GUI的发展简述 续六 虽然早期VB的UI模型比最初的WindowsAPI模型要简单 但是要受到许多限制 这也受到那些高级程序员的蔑视 所以专业的程序员还是直接对User和GDI进行编程 以显示自己的水平 与此同时 互联网引起了软件开发技术的巨大变革 传统的台式机窗体界面受到网页和浏览器的挑战 为应对这种挑战 微软把内部正在开发用于替代VBUI的项目 Forms3 改造成开发浏览器应用程序的平台 并命名为 Trident 其目前的正式产品名为MSHTML dll Trident促进了具有丰富文本布局 标记和脚本支持的HTML特定引擎的发展 13 GUI的发展简述 续七 几乎同时期的另一个重要事件是 美国Sun公司于1994年引入的JAVA第一次让大批程序员接受了虚拟机的概念并掌握了微软在VB中引入的代码托管技术 这使代码托管成为一种业界的主流和时尚的技术 为此 微软于2002年发布了自己的通用托管代码平台 NETFrame work 包含在其中的WindowsForms是一个针对User32和GDI GDI32的升级版本 的托管代码API WindowsForms被用于代替VB中旧的 Ruby 窗体开发包 14 关于代码托管 在 NET框架里支持的所有开发语言如C VB等都使用相同的一套公共语言运行库CLR 以运行库为目标的代码称为托管代码 managedcode 而不以运行库为目标的代码称为非托管代码 一个应用程序可以单独采用托管代码进行构建 完全依赖CLR以及 NET框架类库的相关部分 一个应用程序也可以联合采用托管代码与普通非托管代码进行构建 必要时两者交互作用 一个托管对象能使用另一个托管对象 即使它们用不同语言编写 这正是 NET框架类库成为有效的基础设施的关键原因 15 托管与非托管代码的特点 Windows操作系统 CLR NET框架类库 托管代码 CLR NET框架类库 托管代码 非托管代码 只使用托管代码的应用程序 同时使用托管代码和非托管代码的应用程序 16 GUI的发展简述 续八 1995年 微软的几个程序员自主开发了用于深入控制硬件以提高处理图形速度的DirectX 随后该产品得到公司的大力支持经过数年发展 成为一种支持显卡提供复杂纹理 特殊效果和三维图形的硬件加速功能的优秀软件包 进入新千年后 微软拥有4个主要的UI平台 User32 GDI32 Ruby Trident和WindowsForms 这些技术解决了不同方面的问题 具有不同的编程模型 被不同的用户群所使用 可是这4项主要的UI技术里没有一种能够利用DirectX技术 且这4种UI都不能提供类似现代视频游戏的独特视频播放能力 也缺乏多媒体 动画的能力 17 GUI的发展简述 续九 这四个平台彼此独立 各自满足一部分客户的需求 要混合与配合这些平台中的各个部分技术非常困难且容易出错 而且需要保持4个各自独立的开发团队 重复大量的投资 其核心技术也有很多重复 造成大量的重复浪费 User32 GDI32 Ruby Trident WindowsForms 18 GUI的发展简述 续十 2001年 微软成立了一个新团队 Aralon 以便创建一个统一的界面展示平台 最终代替微软现存的4个UI平台 并且能够充分利用DirectX技术 为用户提供一个面向未来 适应互联网与移动的全新的界面显示开发平台 在2003年 这个团队的开发成果被微软作为Aralon发表 后来 进过几次改进 该项目被正式命名为WPF视窗演示基础 User32 GDI32 Ruby Trident WindowsForms DirectX WPF 19 GUI的发展简述 续十一 经历了近20年的Windows开发和约10年的Web开发 GUI程序员们手中的开发工具也经过几次变迁 每一次变迁都使得程序的开发效率和质量产生飞跃 从2007年开始 微软推出了全新一代的GUI开发工具WPF 并且把WPF定义为未来十年Windows平台GUI开发的主要技术 也是微软 NET架构在台式机 Web网页和移动处理技术领域唯一通用的展示技术开发平台 时至今日 微软的新一代产品包括WindowsVista Windows7 WindowsServer2008 Windows8 VisualStudio2008和2010以及移动操作系统平台Silverlight等都全部采用了WPF 20 NET各个版本的关系 NET2 0CLRWinFormsWebServicesASP NET NET3 0 WCFWFWPF CardSpace LINQAJAXREST NET3 5 NET2 0是整个 NET的核心 NET3 0是在 NET2 0的基础上增加了WPF WCF WF CardSpace等跟Vista有关的组件 NET3 5除了包含 NET3 0的全部功能外 增加了对LINQ Ajax等技术支持的全新框架库和编译器 21 1 3WPF在软件开发中的作用 WPF在程序开发中起什么作用呢 一个实例 一家医疗单位的技术主管找到我说 你能不能用WPF为我们开发一套业务管理系统呀 其实 这就是一个对WPF典型的误解 误解在何处 主要是没弄清WPF的功用 当今的软件应用程序 除了一些非常小巧的实用工具外 绝大部分程序都是多层架构的程序 一般至少包含3层 数据层 业务逻辑层和表示层 它们之间的关系如下图所示 22 应用程序三层体系结构示意图 数据库 业务逻辑处理 数据层 业务逻辑层 表示层 手机程序 桌面程序 浏览器程序 用户 23 多层架构中各层的功能 数据层 用于存储数据 多由数据库构成 有时候也用数据文件辅助存储数据 比如医院的药品列表 人员列表 病例列表等都存储在这一层 业务逻辑层 用于根据需求使用计算机程序表达显示的业务逻辑 比如哪些医生可以给哪类病人看病 从挂号到取药的流程 从住院到出院的流程等 都由这层来实现 这层一般都是通过一组服务 Service 向表示层公开自己的各个功能 它所需要的数据则到数据层寻找 这项工作由它自己附设的数据访问子层 DAL 来专门处理 24 多层架构中各层的功能 续一 表示层 负责把数据和流程展示给用户看 对于同一组来自业务逻辑层的数据 可以选择多种表达方式 比如 对于同一张药品单 可以用短信的形式提供给客户 如果客户想打印药品单的详细内容 可以用表格的形式来表达 如果客户想直观地看到每种药品占总价格的比例 又可用饼图来表达 除了用于表示数据 表示层还负责展示流程 响应用户操作等 表示层程序可以在桌面程序 浏览器程序 手机程序或各种智能设备中运行 所以也被称为客户端程序 25 专门编写表示层的WPF WPF的功能就是用来编写应用程序的表示层 至于业务逻辑层和数据层的开发也都有专门的新技术 比如业务逻辑层的新技术是WCF WindowsCommunicationFounda tion 和WF WindowsWorkflowFoundation 数据层的新技术是LINQ LanguageIntegratedQuery 目前微软另一个热门技术Silverlight是WPF的一个子集 专门用于移动和嵌入式开发平台 学会了WPF 也就至少学会了它的80 而且 学会了WPF也就基本掌握了约一半的WCF和WF 26 为何要学习WPF 有人会问 既然已经有这么多表示层技术 为什么还要推出WPF技术呢 我们花精力学习WPF技术有什么收益和好处吗 可以从一下两方面来回答这些问题 27 为何学习WPF 一 首先 只要开发表示层程序就必须与四种功能性代码打交道 即 数据模型 显示世界中事物和逻辑的抽象业务逻辑 数据模型之间的关系与交互用户界面 由控件构成的 与用户进行交互的界面 用于把数据展示给用户并响应用户的输入界面逻辑 控件与控制之间的关系与交互 这四种代码的关系见下图所示 28 编程中四种代码的关系 用户界面 数据模型 业务逻辑 界面逻辑 在保持代码可维性前提下 如何让数据能顺畅到达界面并灵活显示 且能方便接收用户输入是表示层开发的核心技术 人们研究了MVC和MVP等模式 在WPF出现之前 WindowsForms和ASP NET都使用 事件驱动 概念 即 事件 订阅 事件处理器 方式 使用MVC和MVP模式仍会使界面逻辑与业务逻辑纠缠在一起 而WPF则是开发理念上的升级 由事件驱动变为数据驱动 29 为何学习WPF 二 在事件驱动时 用户每进行一个操作会激发程序发生一个事件 事件发生后 用于响应事件的事件处理器 一个方法或函数 就会执行 在这个方法中程序员可以处理数据或调用别的方法 这样 程序就会在事件的驱动下向前执行了 可见 事件驱动时代的数据是静态的 被动的 界面控件是主动 界面逻辑与业务逻辑之间的桥梁是事件 30 为何学习WPF 三 WPF提出的数据驱动正好于此相反 当数据发生变化时 会主动通知界面控件 推动控件展示最新的数据 同时 用户对控件的操作会直接送达数据 就好象控件是 透明 的 所以 在数据驱动理念中 数据占主动地位 控件和控件事件被弱化 在WPF中 数据与界面的关系就是哲学中的内容与形式的关系 内容决定形式 所以数据驱动界面 这非常符合哲学原理 数据与界面之间的桥梁是数据关联 DataBinding 通过这个桥梁 数据可以流向界面 再从界面流回数据源 31 为何学习WPF 四 其次 微软已经把WPF的理念扩展到了几乎全部开发平台 包括桌面平台 浏览器平台和手机平台以及其他嵌入式设备平台 WPF也是目前乃至今后相当长一段时间内微软唯一打算倾全力投资支持的展示技术开发平台 而从微软目前在软件界的霸主地位来看 熟练掌握了WPF开发技术就意味着在整个软件行业有了畅通无阻的通行证 也有了高水平和高待遇的程序员的资格证 32 1 4WPF的体系架构 WPF使用多层体系结构 在顶层 应用程序和一个完全由托管的C 代码编写的高层服务集合交互 绘制图形的Direct3D纹理和三角形模块是其底层 中间层是媒体集成层 至于将 NET对象转换为Direct3D纹理和三角形的实际工作 在后台是由一个名为milcore dll的低级非托管组件完成的 33 WPF的体系架构示意图 Direct3D User32 底层 milcore dll WindowsCodecs dll 媒体集成层 PresentationCore dll WindowsBase dll 托管的WPFAPI 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 5WPF的核心类的层次结构 构成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中 和屏幕上的元素进行交互的主要方式是通过依赖项属性 Dependencyproperty 特性 这种特性靠继承此类来实现 System Threading Media Visual类 在WPF应用程序中显示的每个元素 在本质上都是一个Visual对象 可以将Visual类看作是一个图形对象 它封装了绘图指令 绘图的细节描述以及基本功能 40 WPF核心类的说明 续一 4 System Threading UIElement类 UIElement类为WPF的本质特征提供支持 如布局 输入 焦点以及事件 例如 测量和排列这两步在该类中进行处理 5 System Threading FrameworkElement类 此类是WPF核心继承树中的最后一站 它实现了一些由UIElement类定义但是没有实现的成员 例如 UIElement类为WPF布局系统设置变换 而FrameworkElement类提供了支持变换的关键属性 像HorrizonalAlignment和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 6WPF应用程序的创建 在Windows操作系统中 所有的应用程序都在自己独立的进程中运行 WPF也是如此 每个进程都有自己独立的内存地址 进程间的数据是隔离的 进程之间不会互相影响 当应用程序创建进程时 同时创建一个或多个属于该进程的线程 这些线程在自己的进程空间中运行 在底层 WPF仍然使用Windows的消息驱动机制来实现事务处理 43 WPF对应用程序的统一 当前计算机应用程序的人机界面 UI 主要分为三类 桌面 Desktop 应用程序 互联网 Web 应用程序和移动智能终端应用程序 WPF首次实现了对前两类应用程序的统一编程 而WPF的子集Silverlight也实现了对移动终端的应用程序的编程 UI表示层 手机程序 桌面程序 浏览器程序 Silverlight WPF 用户 44 WPF创建时涉及到的类 WPF程序涉及到三个最重要的类 ApplicationWindowPage创建WPF应用程序首先从Application类开始 这要利用微软的VisualStudio2008 或2010 45 创建WPF程序生成的文件 创建每个WPF程序时 系统自动生成四个文件 App xaml定义Application对象及其设置 其中最重要的设置是StartupUri属性 定义载入程序时首先执行的XAML文档 默认为Window1 xaml App xaml cs是其代码后类 处理程序层的事件 代码后类的文件名总是相关XAML文档名加上文件扩展名cs Window1 xaml定义程序窗口 Window1 xaml cs是其代码后类 处理窗口的事件 46 WPF应用程序的创建 创建WPF程序 在VisualStudio2008集成开发环境 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文件 usingSystem usingSystem Windows namespaceYingbao Chapter1 publicclassDesktopApp Application STAThread publicstaticvoidMain Window1win newWindow1 win Title WPFapplication win Content HelloWPF win Show Applicationapp newApplication app Run Application类的派生类 所有WPF程序 都必须在单一线程STA模型中运行 52 例子1 1的简单分析和运行结果 程序中的Main函数是WPF程序的入口点 必须是静态的 该函数前有STAThread属性 表示本程序满足所有WPF程序都必须在单一线程模型STA中运行的特点 也就是UI不能在多线程的环境中运行 若不调用Window类中的Show方法 直接调用app Run win 方法 则由Run方法自动调用win Show 方法 53 Dos窗口 当用VisualStudio2008创建WPF应用程序时 乐意设置所创建的应用程序是为带有Dos窗口的应用程序 还是桌面应用程序 方法如下 在VS2008中 选择要设定的项目 单击鼠标右键 选择 属性 会弹出下面的窗口 在其中中部右侧的 输出类型 的下拉控件里 有三项选择 ConsoleApplication WindowsApplication和ClassLibrary 54 选定项目 当用VisualStudio2008创建WPF应用程序时 可以设置所创建的应用程序是为带有Dos窗口的应用程序 还是桌面应用程序 方法如下 在ConsoleApplication WindowsApplication和ClassLibrary中选定某一项 若选择ConsoleApplication 则WPF不阻止用户创建窗口 而是在创建桌面窗口的同时创建Dos命令行窗口 55 选择输出类型 56 Dos命令行窗口的调试 使用Dos命令行窗口用来调试程序非常方便 比如在上面的这段程序里加入ConsoleWriteLine 则这些信息会在Dos命令行窗口显示 当调试好WPF程序后 再把输出类型改为WindowsApplication 如果项目是要创建一个类库 就要把输出类型改为ClassLibrary 在一个进程中 只能创建一个Application实例 但是可以创建多个Window实例 每个Window实例就是一个可以显示的窗口 57 例子1 1的Dos窗口运行结果 58 1 7WPF应用程序的启动与终止 每个应用程序都在自己生存周期 在这个周期里会产生相关的事件和方法 通常在相关事件发生时 WPF会首先调用在Application类中的相应方法 然后再产生相关事件 所以 这些方法常常会有相应的事件相对应 例如 OnActivated方法和Activated事件 OnDeactivated方法和Deactivated事件等 下表列出了这些常见的方法和事件 查看WPF应用程序的启动与终止过程 有两种方法 一是从Application类中派生出自己的类 并使用虚函数覆盖技术来观察Application类在运行中调用虚函数的过程 二是处理Application类中的相关事件 59 Application类中与应用程序生存周期相关的事件 60 例子1 2使用XAML的声明或GUI编程 上面的例子1 1是使用C 代码来创建Application的类 实际上在WPF应用程序中更常用的是使用XAML来创建Application类实例 当选择WPFApplication项目模版时 VS2008自动创建了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文档 包含许多嵌套元素 放在开始和结束标记之间 下面的例子显示 WelcometoWPF 62 例子1 2简单XAML文档定义的窗口 下面的例子用简单的XAML文档定义一个窗口 并显示 WelcometoWPF WelcometoWPF 63 例子1 2程序的简单说明 每个XAML文档要有一个根元素 本例是Window控件定义程序窗口 数据作为嵌套内容或属性 每个XAML文档要定义2个标准名字空间 即2个URN 以便XAML编译器能解释后面出现的标记 演示XAML名字空间定义为默认名字空间 标准XAML名字空间映射前缀x 当VS2008创建WPF程序时 它们被自动放进Windows元素的开始标志中 WPF控件表示为XAML标记中的元素 如XAML文档的根元素是Window控件 定义程序窗口 对应于Windows窗体中的Form控件 64 例子1 2程序的简单说明 续 Window控件的开始标记还定义另一个属性x Class 指定相关代码后类的类名 x 表示Class属性位于标准xaml空间中 利用属性可以在XAML中定义控件的属性 例如 设置Window控件的属性Height 150 Width 250 Title ASimpleWindow 等 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表示对象占用尽量大的空间 一般布局原则 续
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!