WPF开发入门
- 格式:pdf
- 大小:362.63 KB
- 文档页数:10
9.1.1 什么是WPF Windows 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提供了一套新的应用程序开
发模式,该模式与ASP.NET网页开发模式有几分相似之处,也是一种前后台开发模式。本节简单介绍一下这种开发模式的 一些基本概念。
和普通的Windows窗体应用程序一样,WPF应用程序的开发也分界面设计和后台代码两个
部分,WPF应用程序界面设计代码和ASP.NET页面 (见本书第19章)相似。WPF的界面
代码是一种新的标记性语言--XAML,后台代码则是C#、VB.NET等.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
元素映射为引用的程序集中定义的Microsoft.NET类型,而属性(Attribute)则映射 为这些
类型的成员。
示例代码9-1演示了一个简单的WPF窗体的XAML代码,层次大致是,一个Windows窗体
包含一个Grid,Grid内部包含一个Label 控件和一个Button控件。其中Windows窗体映射到后台代码中的类为HelloWPF.Window1,标题为Title属性的值 --HelloWPF,对象名称
(Name属性)为FrmMain等。另外,Button控件的名称为btnShowMsg,Click事件处理函
数为 btnShowMsg_Click()。
示例代码9-1:
Title="HelloWPF" Height="179" Width="262" Name="FrmMain">
VerticalAlignment="Top">Hello WPF, I'm coming ! Show
Message
在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 {
/// /// Window1.xaml 的交互逻辑
///
public partial class Window1 : Window {
public Window1( )
{
InitializeComponent( );
}
private void btnShowMsg_Click(object sender, RoutedEventArgs
e)
{
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"分类中。其中,WPF独立应用程序和WPF浏览器应用程序都比较常用,而控件库应用程序则多用在需要自行开发并发布独立的用户控件