第7章 WPF编程入门

第7章WPF编程入门
WPF的英文全称是Windows Presentation Foundation,中文也可称为Windows表现层基础,是微软公司在.NET Framework 3.5平台上推出的一个图形平台。使用WPF可以在Windows Vista操作系统平台上开发出具有炫目视觉效果的应用程序,当然也可以应用在Windows XP或者是Windows 2003操作系统上。本章就介绍WPF的特点和机构以及如何在.NET 3.5框架上应用WPF。
7.1  WPF概述
WPF是.NET Framework的一个子集。对于熟悉.NET Framework平台的开发人员来说,非常容易上手。WPF提供了非常多的新的概念和技术,将会改变传统Windows程序员的开发观念和开发方式。
作为Windows Vista操作系统下的全新的表现层技术,WPF完美地整合了矢量图形、2D或3D绘图技术、文件以及多媒体技术。WPF将开发人员和设计人员的职责清楚地分离,提供了一种声明式编程语言XAML。微软同时提供了Microsoft Expression设计工具,让设计人员发挥其艺术天分。开发人员与设计人员的完美结合,未来的Windows桌面将会更加精彩纷呈。
7.1.1  理解Windows图形系统
如果读者具有多年的Windows程序设计经验,无论使用何种开发工具,比如Visual Basic、Delphi、C++
等,为了创建Windows用户界面,都会直接或间接地使用到Windows 操作系统的如下所示的两大部分。
User32:提供Windows应用程序的组成元素,比如窗口、文本框、按钮等。
chinesefeederGDI/GDI+:提供绘图API,比如绘制图形、文本和图像等。
很多应用程序开发框架中,提供的便利的UI或绘图开发方法都是对这两个子系统API 的封装,以便降低开发人员调用Win32 API的复杂性,比较有名的有Boland的VCL、微软的MFC等。
自从Windows 1.0推出后的二十多年时,这两个Windows图形服务已经越来越稳固。然而随着软件技术的日益发展,传统的图形UI已经越来越难以满足用户对界面日益增长的需求。而且随着图形硬件及网络技术的发展,越来越需要有一种全新的图形子系统来提供绚目的用户界面。微软曾经称为Avalon的Windows Presentation Foundation,摆脱了传统图形UI开发的不足,不再基于User32和GDI/GDI+,而是基于微软的DirectX技术。
第7章  WPF编程入门
在过去很多年以来,游戏发烧友们都知道DirectX对于游戏的重要性。然而由于DirectX 技术的复杂性,以及其与硬件图形卡的紧密结合的特性,很少有软件基于DirectX来进行开发。WPF的出现弥补了
这种不足,意味着开发人员可以在普通的商业应用程序中应用一些复杂的绘图特性,使应用程序的UI设计具有无穷的潜力,尽管WPF基于DirectX技术,同时依赖于User32来提供一些其他的服务,比如处理和传递输入等。在本章7.1.3小节中详细讨论WPF架构时,将会具体讨论WPF如何利用DirectX进行表示层的呈现。
7.1.2  WPF的功能特点
WPF提供了如下所示的几项功能特性。
基于矢量绘图技术:WPF使用矢量绘图引擎,意味着图形可以无限放大和缩小。
WPF使用Direct3D进行图形的渲染着,充分利用显卡的GPU,即图形处理单元。
设备无关单位:这是一个非常重大的改进,WPF使用1/96的逻辑单位,这使应用程序在不同的分辨率中依然能保持良好的交互性。传统的以像素为单位的用户界
面,在不同的显示分辨率下时,会呈现不同的显示大小,WPF弥补了这种不足。
声明式的程序设计:WPF使用全新的XAML标记语言,进行用户界面的设计,配合代码后置文件来开发应用程序。如果读者有过ASP.NET程序开发经验,那么
WPF这种开发方式有点类传于ASP.NET,一个前端页面和代码后置文件。
Web风格的布局模型:WPF增强了流式布局模型体验,除了使用特定坐标进行固定控件布局外,还可以使用流式布局来动态的排列用户控件,使用户界面高度动
态的适应不同的显示设备,同时更便于创建动态内容。
丰富的绘图模型:WPF除了可以处理基本图形、文本块之外,还提供了很多的新的绘图特性,比如真正的透明控件,使用不同的透明度堆叠多个控件以及原生的
3D支持特性。
原生的多媒体、动画支持:现在,WPF应用程序内置了动画特性。设计人员可以使用XAML标记语言或借助于Microsoft Expression Blend设计工具来设计动画。
同时,也可以使用Microsoft Expression Blend设计多媒体音视频。这个工具会生成
XAML代码,进而丰富WPF应用程序的可交互性。
样式和模板特性:类似于ASP.NET中的主题,或者是CSS样式特性,使应用程序可以重用已有的样式设定。模板允许更改任何元素的呈现方式,比如可以通过模
板控制Button控件的输出。
基于页面的应用程序:WPF允许开发人员创建浏览器风格的应用程序,让用户使用类似超链接的方式在页面中进行导航。应用程序也可以在浏览器中比如Firefox
或者是Internet Explorer中运行。WPF处理了很多繁杂的细节,比如历史页面等。
7.1.3  WPF架构简介
WPF使用多层架构,架构图如图7.1所示。这个架构图中将WPF分为三层结构,最顶层部分为托管代码API。这一层用于开发人员编写WPF应用程序提供较高层次的服务,完全用C#托管代码编写。转换.NET代码到DirectX的工作由中间层的milcore.dll来实现。
·127·
精通C# 3.0与.NET 3.5高级编程——LINQ 、WCF 、WPF 、WF
松木桩
·128·
milcore.dll 是使用非托管代码编写而成,因为它需要与DirectX 紧密集成,对性能极度敏感。
图7.1  WPF 架构图
下面将对图7.1中出现的几个程序集进行详细地介绍。
PresentationFramework.dll :在该程序集中放置高层次的WPF 类型,比如窗口、面
板以及其他类型的控件。它实现了一些高层次的抽象,比如样式等。开发人员所使用的大多数类都来自此程序集。
PresentationCore.dll :存放了基本类型,比如UIElement 和Visual 。
华安现金富利WindowsBase.dll :存放在WPF 外部可能被重用的基本元素,比如DispatherObject
和DependencyObject 。
Milcore.dll :这是WPF 输出系统的核心,也是多媒体整合层的基础。这个程序集
主要用于与DirectX 进行交互。
WindowsCodecs.dll :这是一个底层API ,用于提供图像成像支持,比如图像处理、
图像显示、缩放bitmmap 和JPEG 。
Direct3D :提供3D 图像输出的底层API 。
四棱锥
User32:用于决定程序的状态,该服务并不提任输出通用控件的任务,而是作为处理和设置应用程序状态用。
7.1.4  WPF 的类层次结构
图7.2是WPF 中的基类层次结构,在本书的后续章节会对由这些基类派生出来的子类进行详细地介绍。在深入学习WPF 应用程序之前,有必要大概了解一下WPF 中的类层次结构。
WPF 的核心命名空间都以System.Windows 开始,比如System.Windows, System.Windows.Controls,
System.Windows.Media 。唯一的例外是System.Windows.Forms ,这是Windows Forms 编程工具箱的一部分。下面对这些基类进行分别介绍,如下所示。
System.Threading.DispatcherObject 类:WPF 应用程序使用单线程应用程序模型
(STA ),意味着整个用户界面将被宿主到一个单一的线程。如果其他的线程与用户界面元素交互时,将会产生不安全的影响。为了简化这个模型,WPF 使用一WPF API
第7章  WPF 编程入门
·129·
个为派遣者的对象来整理消息,由此产生出键盘输入、鼠标移动以及框架处理等,比如布局操作等。通过从DispatcherObject 派生子类,应用程序的用户界面可以检查代码是否执行在正确的线程上,并且访问派遣者来整理代码到用户界面线程。
图7.2  WPF 基类的类层次结构图
System.Windows.DependencyObject :WPF 主要通过属性来与界面元素交互。WPF
提供了一套强大的属性系统,并使用声明式的属性语法。使用属性的一个例子是WPF 中的双向数据绑
定。WPF 中的属性是从DependencyObject 类型派生,由其名字可知,这是一个依赖属性。依赖属性会跟踪属性表达式之间的依赖关系。在依赖关系更改时,会自动重新验证属性值。例如,如果具有一个继承的属性如 FontSize ,当继承该值的元素的父级发生属性更改时,会自动更新系统。
System.Windows.Media.Visual :可以把Visual 类看成是一个图形对象,WPF 中的
曲靖师范学院教务网络管理系统呈现的每个元素都是一个可视化对象。这些元素封装了绘图指令,图形如何被绘制的详细信息。比如裁切、透明度和变换的设置以及基本的功能指令。Visual 类也提供了在托管WPF API 和milcore.dll 之间的连接,派生自Visual 的任何类都有能力呈现在窗口上。
System.Windows.UIElement :UIElement 定义了WPF 的核心子系统,包括布局
Layout 、输入Input 和事件Event 、焦点等。比如布局,这是WPF 的一个核心。UIElement 引入了自动布局的基础,其实现通过Measure 和Arrange 两阶段的处理模型,本书在讨论Panel 控件时将会进行详细地介绍。UIElement 引入了增强的事件传递系统,称为事件路由。事件路由可以将事件上下沿传递。本书在讨论依赖属性和事件路由时会进行详细地讨论。
System.Windows.FrameworkElement :作为WPF 继承层次树的终止点,
FrameworkElement 实现了很多在UIElement 仅定义的成员。比如,UIElement 设置了WPF 布局系统
的基础,而FrameworkElement 则包括几个关键的属性提供对布
精通C# 3.0与.NET 3.5高级编程——LINQ、WCF、WPF、WF
·130·局系统的支持,比如HorizontalAlignment和Margin。FrameworkElement同时引入两个关键的内容:数据绑定和样式,本书后面将会有应的章节进行详细讨论。
System.Windows.Shapes.Shape:基本的形状类,比如从该类派生的Rectangle、Polygon、Ellipse、Line和Path等。
System.Windows.Controls.Control:控件是一种用于与用户进行交互的元素,比如TextBox、Button和ListBox等。Control类添加了一些属性比如设置字体、前景和背景等。别外,Control类还提供了对控件模板的支持,允许开发人员使用自定义的样式改变控件的标准呈现。
注意:与Windows Forms不同的是,在Windows Forms中,每个呈现在Form上的对象都是控件。但是WPF则与之不同,可视化对象称为元素,只有能够接收焦点并
且能与用户进行交互的称为控件。
System.Windows.Controls.ContentControl:这是WPF中一个非常重要的基类。
ContentControl 是其他内容控件继承自的类,用来呈现单块内容。派生自ContentControl的类具有一个Content属性。Content属性的类型为Object,因此,在 ContentControl 中可以放置的内容没有任何限制。可以使用可扩展应用程序标记语言(XAML)或代码来设置Content。
System.Windows.Controls.ItemsControl:这是所有集合项控件的基类,比如ListBox 和TreeView控件等。
System.Windows.Controls.Panel:这是所有布局容器面板的基类。布局面板能够使用指定的布局规则来排列放置于其中的一个或多个子元素。这些容器面板是WPF 布局系统的基础。
7.2  WPF开发工具简介
佐藤荣作
前面介绍了太多的理论知识,现在来介绍开发WPF的工具。一般经常使用的开发工具有如下4个:Visual Studio 2008、Microsoft Expression Blend、XAMLPad标记文本查看器和ZAM 3D。
7.2.1 Visual Studio 2008开发工具
要开发WPF应用程序,首选的工具当然是Visual Studio 2008。Visual Studio 2008提供了内置的WPF项目开发模板,如图7.3所示。从图7.3中可以看到,Visual Studio 2008提供了如下所示的4种WPF项目模板。
WPF应用程序:独立可执行应用程序,类似Windows Forms的以exe为扩展名的应用程序。
WPF浏览器应用程序:基于XAML的浏览器的应用程序,以xbap作为扩展名。
WPF用户控件库:用于创建可重用的、组件化的用户控件库。
WPF自定义控件库:用于开发WPF自定义控件的控件库项目。

本文发布于:2024-09-25 07:17:54,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/160818.html

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

标签:应用程序   比如   使用
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议