WPF开发入门

  • 格式:doc
  • 大小:160.00 KB
  • 文档页数:10

9.1.1 什么是WPFWindows Presentation Foundation(WPF)是Microsoft在.NET 3.0中推出的一个重要新特性,它为Windows下应用程序开发提供一套全新的显示系统,旨在为用户提供方便的用户操作和震撼视觉体验的界面。

WPF支持一套完整的应用程序开发功能,包括应用程序开发模型、资源、控件、图形、动画、布局、数据绑定、文档读写、本地化、安全性等。

WPF的核心是一个与分辨率无关的基于向量的呈现引擎,旨在充分发挥现代图形设备的优势,WPF开发和C#集成可以通过Visual Studio 2008非常方便地进行应用程序开发。

WPF和公共语言运行环境(CLR)的完全集成,充分利用了CLR提供的类型安全、跨平台等特性。

另外,WPF在CLR之上提供自身的程序模型和类库,如图9-1所示为MSDN上介绍的WPF 体系结构。

其中,PresentationFramework和PresentationCore都是基于CLR之上,以托管代码的方式公开应用程序开发接口(API)的。

而milcore则在CLR之下,是以非托管代码方式,直接和DirectX紧密集成的,可以充分利用DirectX在图形处理上的巨大便利和性能优势,从而为用户提供具有震撼视觉感受的用户界面。

milcore是WPF隐藏于CLR之下的核心驱动组件,在实际应用程序开发中不太可能访问到,这里不再进一步介绍。

WPF体系结构中一个重要原理就是--基于属性,WPF提供的类库、操作方式等都尽可能使用属性,而不是方法或事件。

因为属性是声明性的,较之方法和事件更加容易指定对象的意图(这在XAML中相当重要),所以属性系统是WPF体系结构中一个重要部分。

在WPF 属性系统中,属性可以被继承和监视,当属性被更改时,属性联系的双方都被通知。

由于被继承,所以子元素可以感受到父元素属性的变化,例如,父窗体的窗体大小属性被更改时,会自动通知到子窗体,并同步刷新界面。

WPF属性系统的根本是System.Windows. DependencyObject类型,它是WPF属性系统的基类。

在WPF中,System.Windows.Media.Visual类型提供了界面元素的显示支持,它用于生成一个可视化树,树中每个元素都包含特定的绘制和实现能力,从而将需要的数据显示到界面。

另外,Visual类还将托管的WPF组件和非托管的milcore组件链接到一起,通过在屏幕上定义一个矩形显示区域来提供显示框架,从而将可视化树中各元素呈现到屏幕上。

WPF中大部分类都是从UIElement、FrameworkElement、ContentElement、Framework ContentElement 4个类派生而来,这4个类称为基元素类。

其中,UIElement是主要类,它是从Visual类派生而来,适用于支持大型数据模型的元素,这些元素用于在可以称为矩形屏幕区域的区域内进行呈现和布局,在该区域内,内容模型特意设置得更加开放,以允许不同的元素进行组合。

在WPF中,改变了传统Windows窗体应用程序中的窗体中相对位置计算的布局模式,在WPF中的布局更像网页上元素的布局,显得更加灵活。

WPF支持5种常用的布局形式,如表9-1所示。

表9-1 WPF中的常用布局模式模式说明Canvas 定义一个区域,在此区域内,可以使用相对于Canvas 区域的坐标显式定位子元素,类似于传统的Windows窗体程序中相对坐标的布局方式DockPanel 定义一个区域,在此区域内,可以使子元素互相水平或垂直排列,对于简单的单行或单列元素布局比较适用Grid 定义由行和列组成的灵活网格区域,类似于网页开发中的网格布局,对于比较复杂而灵活的界面布局比较适用StackPanel 沿水平或垂直方向将子元素排列成一行,对于简单的行或列布局比较适用WrapPanel 从左至右按顺序位置定位子元素,在包含框的边缘处将内容断开至下一行,后续排序按照从上至下或从右至左的顺序进行,具体取决于Orientation属性的值表9-1中列出的布局模式实际是不同类型的面板控件,这些面板本身可以装入其他类型的面板,这样就可以得到不同布局模式的组合,从而构建丰富灵活的应用程序界面。

例如,在一个Grid面板的各单元内放入Canvas面板,就可以得到整体为Grid布局,但内部却是绝对位置布局的界面样式。

除了在窗体布局上的更改之外,WPF支持动画、二维图形、三维图形等图像处理和多媒体技术,另外,WPF还支持文档的打开和阅读等。

由于篇幅限制,这里不再详细介绍。

总之,通过WPF可以轻松开发出具有丰富UI的应用程序。

9.1.2 WPF开发模式Windows Presentation Foundation(WPF)通过Visual Studio 2008提供了一套新的应用程序开发模式,该模式与网页开发模式有几分相似之处,也是一种前后台开发模式。

本节简单介绍一下这种开发模式的一些基本概念。

和普通的Windows窗体应用程序一样,WPF应用程序的开发也分界面设计和后台代码两个部分,WPF应用程序界面设计代码和页面(见本书第19章)相似。

WPF的界面代码是一种新的标记性语言--XAML,后台代码则是C#、等.NET高级语言(本书实例中都使用C#)。

XAML可以理解成一种特殊的XML文件,因为它的格式和XML一致,但是,根据节点的不同意义,XAML节点可以描述不同的界面元素,所以XAML被用作WPF的UI编写语言。

XAML简化了为.NET Framework编程模型创建UI的过程,XAML文件是指通常使用.xaml 为扩展名的XML文件。

在XAML中,界面上的每个UI元素都是一个节点,该节点包含多个子节点,每个子节点表示了父节点所包含的一个UI元素,从而就可以体现出UI上的控件等元素的布局方式。

开发人员可以使用代码隐藏文件将UI定义与运行时逻辑相分离。

与普通的XML不同,XAML 直接呈现托管对象的实例化,这种常规设计原则简化了使用XAML创建的对象的代码和调试访问。

XAML具有一组规则,这些规则将对象元素映射为类或结构,将XML节点的属性(Attribute)映射为类的属性(Property)或事件,并将XML命名空间映射为CLR命名空间。

XAML 元素映射为引用的程序集中定义的类型,而属性(Attribute)则映射为这些类型的成员。

示例代码9-1演示了一个简单的WPF窗体的XAML代码,层次大致是,一个Windows窗体包含一个Grid,Grid内部包含一个Label 控件和一个Button控件。

其中Windows窗体映射到后台代码中的类为HelloWPF.Window1,标题为Title属性的值--HelloWPF,对象名称(Name属性)为FrmMain等。

另外,Button控件的名称为btnShowMsg,Click事件处理函数为btnShowMsg_Click()。

示例代码9-1:<Window x: xmlns="/winfx/2006/xaml/presentation"xmlns:x="/winfx/2006/xaml"Title="HelloWPF" Height="179" Width="262" Name="FrmMain"><Grid><Label Height="28" Margin="44,31,49,0" Name="lbHint"VerticalAlignment="Top">Hello WPF, I'm coming !</Label><Button Height="34" Margin="32,0,36,35" Name="btnShowMsg"VerticalAlignment="Bottom" Click="btnShowMsg_Click" >ShowMessage</Button ></Grid></Window>在WPF应用程序中,与XAML所描述的UI界面对应,还包含一个后台代码文件,本书用C#语言开发,名称为XAML文件名后面添加.cs后缀名,如示例代码9-1对应的XAML文件名称为Window1.xaml,对应的后台代码文件名为Window1.xaml.cs,如示例代码9-2所示为与示例代码9-1对应的后台代码。

其中,类Window1从Window类继承,对应到示例代码9-1中的FrmMain窗体所使用的类,btnShowMsg_Click()方法则对应到示例代码9-1中btnShowMsg的Click事件处理函数。

这两个代码文件相互关联,并且一一对应,一个发生修改必须同时修改另外一个。

示例代码9-2:namespace HelloWPF{/// <summary>/// Window1.xaml 的交互逻辑/// </summary>public partial class Window1 : Window{public Window1( ){InitializeComponent( );}private void btnShowMsg_Click(object sender, RoutedEventArgse){MessageBox.Show("Hello WPF, I'm coming !");}}}9.1.3 WPF应用程序Windows Presentation Foundation(WPF)旨在提供用户界面应用程序开发框架,所以基于WPF的应用程序多为用户界面程序。

Visual Studio 2008集成了WPF开发支持,提供下面4种类型的WPF应用程序创建向导。

WPF应用程序:也称WPF独立应用程序,创建一个在客户端直接运行的独立的应用程序,和Windows窗体应用程序类似。

WPF浏览器应用程序:创建一个可以承载在浏览器(IE6、IE7及以上版本)之内的应用程序,可以进行页面导航,但是和Web页面不一样。

WPF用户控件库:创建包含开发人员自行开发的WPF用户控件类库。

WPF自定义控件库:创建包含开发人员自行开发的自定义控件类库。

这些应用程序类型都包含在"C#"→"Windows"分类中。