WPF简介与XAML语言
本章重点
理解WPF是什么
了解WPF工作原理
了解WPF运行环境
windows开发平台WPF的生命周期
1.1 WPF简介
从2007年开始,微软推出了它的新一代GUI开发工具Windows Presentation Foundation(直译为Windows表示基础,WPF),并且把WPF定为未来十年Windows平台GUI开发的主要技术。
1.1.1 什么是WPF
WPF(Windows Presentation Foundation)是微软推出基于Windows Vista的用于界面的框架,属于.NET Framework3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。
WPF的核心是一个与分辨率无关并且基于向量的呈现引擎(这样就可以保证图像和影像具有高清晰度),旨在利用现代图形硬件的优势。WPF通过一整套应用程序开发功能扩展了这个核心,这些功能包括可扩展应用程序标记语言(XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文本和版式。
Windows呈现基础(Windows Presentation Foundation,WPF)是一个用于Windows平台的全新的图形显示系统。WPF是针对.NET而设计的,它受现代显示技术如HTML和Flash以及硬件加速技术的影响。WPF也完全不同于自从Windows 95以来一直使用的Windows用户界面。从2007年开始,微软推出了它的新一代GUI开发工具Windows Presentation Foundation(直译为Windows表示基础,WPF),并且把WPF定为未来十年Windows平台GUI开发的主要技术。时至今日,不但Windows Vista、Windows 7、Windows Server 200
8、Windows Server 2008 R2等系统已经无缝集成了WPF,连Visual Studio 2010等重要产品业已使用WPF进行开发。可见微软在WPF技术方面的务实精神与决心。
1.1.2 WPF的作用
一次,某单位的技术主管到我们的一个项目经理说:"你能不能用WPF为我们开发一套管理系统呀?"其实,这就是一个对WPF的典型误解。误解在何处呢?主要是没有弄清WPF的功用。当今的程序,除了一些非常小巧的实用工具外,大部分程序都是多层架构的程序。一提到多层架构,一般就至少包含3层:数据层、业务逻辑层和表示层(它们的关系如图1-3所示)。
图1-1简单三层管理系统
这3层的功能大致如下:
数据层:用于存储数据,多由数据库构成,有时候也用数据文件能辅助存储数据。比如医院的药品列表、人员列表、病例列表等都存储在这一层。
业务逻辑层:用于根据需求使用计算机程序表达现实的业务逻辑。比如哪些医生可以给哪些病人看病,从挂号到取药都有什么流程,从住院到出院有哪些流程,都可以由这层来实现。这一层一般会通过一组服务(Service)向表示层公开自己的各个功能。因为这一层需要与数据层进行交互,所以经常会划分出一个名为"数据访问层"(Data Access Layer,DAL)的子层专门负责数据的存取。
表示层:负责把数据和流程展示给用户看。对于同一组来自业务逻辑层的数据,我们可以选择多种表达方式。比如对于同一张药品单,如果想以短信的形式发送给药房,可以以一串字符的形式来表达;如果客户想打印药品单的详细内容,可以以表格的形式来表达;如果客户想直观地看到每种药品占总价格的比例,我们可以使用饼图来表达。除了用于表示
数据,表示层还负责展示流程、响应用户操作等。而且,表示层程序并不拘泥于桌面程序,很多表示层程序都运行在手机或浏览器里。表示层程序也常被称为客户端程序。
1.1.3 WPF发展史
微软在83年春季就宣布开始研究开发Windows,到现在已经27年,这27年来,微软官方主力推行的编程语言与API有四个主要阶段:
1. 1983~1991年:C搭配WindowsAPI。当时的程序员很少,并且开发一个项目也很不容易
2. 1992~2001年:这段时间C++搭配MFC库。在历史上MFC是最多人用的Windows编程方法。但此后MFC技术也逐渐退出历史舞台。
3. 2002~2006年:(C#、VB以及其他语言)+Windows Form框架。这段时间IT技术的焦点是在Web上,所以虽然大家都在用.NET,但真正的主角是ASP.NET,而不是Windows Forms。Windows Forms其实是不错的技术,在很多方面都做得很好,比如在UI上、图形编程上、开发效率上、稳定性都做得让人敬佩,但是我们最后看到的结果确实大家没有引起足够的重视,很多人更偏向于用Delphi和MFC,对WindowsForms却视而不见,所以最
后的结果是WindowsForms生不逢时。
4. 2006~现在:Windows Vista正式全球同步发布。它之所以能实现那么绚丽的效果,最关键的一点就是Windows Presentation Foundation(WPF),WPF所带来的震撼视觉效果和用户体验使Vista的效果如此绚丽,虽然Vista在后来最终称为了一个败笔,但它为Windows7打下了坚实的基础。后台语言(C#、VB以及其他语言)+XAML构成的WPF。你可能觉得很奇怪,微软为何释出两个作用相似,却不同不相容的.NET API。因为时代的改进,用户对视觉感受需求不断提高。因为WPF支持硬件加速、精确颜、浮点坐标、动画实现、三维、视频感受等要求提高。而传统的WinForm是达不到这些效果的。
1.2 WPF体系结构
1.2.1 WPF核心组件
在Windows Vista和Windows 7 中,GDI、GDI+和WPF并行存在。但是,WPF所有的操作都不依赖于GDI和GDI+,而是间接依赖于强大的Direct3D。
图1-2  WPF核心组件结构
上图中标示为暗红的是WPF的三大核心组件:
Milcore组件:完成与Direct3D的交互。并且出于效率和安全的考虑,milcore由非托管代码实现。WPF中的所有显示都是通过DirectX引擎完成的,可以实现高效率的硬件和软件呈现。WPF还要求对内存和执行进行精确控制。Milcore中的组合引擎受性能影响关系很大,
需要放弃CLR的许多优点来提高性能。(User32组件:是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等待性,如创建窗口和发送消息。它是操作系统的一个核心组件,和操作系统是紧密联系在一起的。也就是说,不同系统版本的User32是不同的。因此,应用程序在不同版本的Windows中运行的时候,由于User32.dll的不同,会导致应用程序的界面也有微小的不同。)
WPF的另外两大核心组件PresentationFramework和PresentationCore都位于通用语言运行库(CLR)上。可以看出,WPF的大部分代码都是以托管形式存在的。这两大组件提供的WPF项目需要的函数库和功能库,由于是以托管的形式存在,所以也避免了我们直接操作底层和出现诸如内存泄露的可能性。
下图是WPF应用程序运行的过程:
图1-3  WPF应用程序运行步骤
1.2.2 WPF基本功能和服务
图1-4  WPF基本功能和服务视图
Core Presentation:包含了所有的图像效果,如:图形、特效、2D图形、3D图形、文本、音频、视频等等。同时还包括强大的动画效果,动画可以应用前面的所有元素。最下面的Visual Primitives是视觉基本元素。
User Interface Services:包含了Application Services(应用程序服务)、Deployment Services(部署服务)、Controls(控件库)、Layout(布局)和Data Binding(数据绑定)。
Base Services:提供了XAML支持、Accessibility(提高开发效率)、Input&Events(输入和事件的支持)、Property System(属性系统)。
Document Services和XPS Viewer:提供了基本的打印和报表服务,可以通过这些组件实现自定义的打印和显示效果。
总结:
输入方面:WPF支持键盘、鼠标、手写笔、触摸屏、蓝牙录入、视频捕捉等,几乎没任何限制;
和外部设备的交互方面:有驱动、COM、Win32或通信协议支持的任何设备。
打印和报表方面:可访问打印对话框、打印队列、打印窗体、控件以及很多可选操作,同时对报表的支持也很好。
在动画、图形图像、3D、影像的支持也相当好(其他技术很难做到),所以WPF除了在性能方面还存在缺陷以外,其他方面可以说做得非常优秀。
    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
1-1WPF与现有技术的对比
从这张表可以看出,WPF技术和现有的其他技术有很多相似之处,比如:XAML和XHTML、Styles和CSS都尤其相似,所以对我们开发人员来说,学习WPF并不是一件难事。
1.3 XAML语言
XAML(eXtensible Application Markup Language)语言,即扩展应用程序标记语言,它基于XML语言,可以用来创建.NET对象的树状列表。XAML语言提供了一种构造WPF用于界面的简单方法。这一节我们将讲解XAML语法。在正式学习XAML语言之前,我们会先创建一个WPF应用程序,这样学习起来会更加轻松。
1.3.1 创建WPF应用程序
创建WPF应用程序的步骤如下:
第一步:创建空白解决方案
图1-5创建空白解决方案
第二步:创建WPF应用程序项目
图1-6创建WPF应用程序项目
第三步:创建WPF窗体
图1-7添加WPF应用程序窗口
解决方案资源管理器中的文件介绍如下:
图1-8 项目结构
1.3.2 什么是XAML语言
XAML是一种陈述性语言。你可以使用XAML标记创建可视化的UI原件。 之后,你可以在一个单独的文件中使用JavasScript来操作你在XAML所声明的对象、响应一些事件。作为
一种以XML为基础的陈述性语言,它创建界面时,从原型到产品的过程非常直观,尤其是对于有网页设计背景知识和技术的人。
XAML文件通常是以.xaml为后缀的XML文件。下面是一个典型的WPF XAML文件例子。
<Window x:Class="WPFLesson.Demo1"
    xmlns="schemas.microsoft/winfx/2006/xaml/presentation"
    xmlns:x="schemas.microsoft/winfx/2006/xaml"
    Title="Demo1" Height="300" Width="300">
<Grid>
</Grid>
</Window>
代码段1-1窗体的XAML代码

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。