WPF开发入门.docx

上传人:b****0 文档编号:17642301 上传时间:2023-07-27 格式:DOCX 页数:16 大小:104.25KB
下载 相关 举报
WPF开发入门.docx_第1页
第1页 / 共16页
WPF开发入门.docx_第2页
第2页 / 共16页
WPF开发入门.docx_第3页
第3页 / 共16页
WPF开发入门.docx_第4页
第4页 / 共16页
WPF开发入门.docx_第5页
第5页 / 共16页
WPF开发入门.docx_第6页
第6页 / 共16页
WPF开发入门.docx_第7页
第7页 / 共16页
WPF开发入门.docx_第8页
第8页 / 共16页
WPF开发入门.docx_第9页
第9页 / 共16页
WPF开发入门.docx_第10页
第10页 / 共16页
WPF开发入门.docx_第11页
第11页 / 共16页
WPF开发入门.docx_第12页
第12页 / 共16页
WPF开发入门.docx_第13页
第13页 / 共16页
WPF开发入门.docx_第14页
第14页 / 共16页
WPF开发入门.docx_第15页
第15页 / 共16页
WPF开发入门.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

WPF开发入门.docx

《WPF开发入门.docx》由会员分享,可在线阅读,更多相关《WPF开发入门.docx(16页珍藏版)》请在冰点文库上搜索。

WPF开发入门.docx

WPF开发入门

9.1.1什么是WPF

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

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

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

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、FrameworkContentElement4个类派生而来,这4个类称为基元素类。

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

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

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

表9-1WPF中的常用布局模式

模式

说明

Canvas

定义一个区域,在此区域内,可以使用相对于Canvas区域的坐标显式定位子元素,类似于传统的Windows窗体程序中相对坐标的布局方式

DockPanel

定义一个区域,在此区域内,可以使子元素互相水平或垂直排列,对于简单的单行或单列元素布局比较适用

Grid

定义由行和列组成的灵活网格区域,类似于网页开发中的网格布局,对于比较复杂而灵活的界面布局比较适用

StackPanel

沿水平或垂直方向将子元素排列成一行,对于简单的行或列布局比较适用

WrapPanel

从左至右按顺序位置定位子元素,在包含框的边缘处将内容断开至下一行,后续排序按照从上至下或从右至左的顺序进行,具体取决于Orientation属性的值

表9-1中列出的布局模式实际是不同类型的面板控件,这些面板本身可以装入其他类型的面板,这样就可以得到不同布局模式的组合,从而构建丰富灵活的应用程序界面。

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

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

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

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

9.1.2WPF开发模式

WindowsPresentationFoundation(WPF)通过VisualStudio2008提供了一套新的应用程序开发模式,该模式与ASP.NET网页开发模式有几分相似之处,也是一种前后台开发模式。

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

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

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

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

XAML简化了为.NETFramework编程模型创建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:

xmlns="

xmlns:

x="

Title="HelloWPF"Height="179"Width="262"Name="FrmMain">

VerticalAlignment="Top">HelloWPF,I'mcoming!

VerticalAlignment="Bottom"Click="btnShowMsg_Click">ShowMessage

在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:

namespaceHelloWPF

{

///

///Window1.xaml的交互逻辑

///

publicpartialclassWindow1:

Window

{

publicWindow1()

{

InitializeComponent();

}

privatevoidbtnShowMsg_Click(objectsender,RoutedEventArgse)

{

MessageBox.Show("HelloWPF,I'mcoming!

");

}

}

}

9.1.3WPF应用程序

WindowsPresentationFoundation(WPF)旨在提供用户界面应用程序开发框架,所以基于WPF的应用程序多为用户界面程序。

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

WPF应用程序:

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

WPF浏览器应用程序:

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

WPF用户控件库:

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

WPF自定义控件库:

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

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

其中,WPF独立应用程序和WPF浏览器应用程序都比较常用,而控件库应用程序则多用在需要自行开发并发布独立的用户控件类库中。

一个可执行的WPF应用程序通常需要一组核心功能,包括创建和管理通用应用程序基础结构、跟踪应用程序的生命周期、检索和处理命令行参数、处理资源文件、拦截未处理异常、返回退出代码等。

另外,一个WPF应用程序除了可执行文件之外,还需要其他外部文件的支持,这些文件主要有资源文件、内容文件、源站点文件3类。

WPF应用程序的资源文件和Windows窗体应用程序的资源文件一样,在程序开发时期准备,并且被编译到应用程序内部。

内容文件则是独立于应用程序的文件,但是应用程序运行时这些文件是必需的,例如应用程序配置文件、数据库文件等。

这些文件在发布时与应用程序一起发布,在开发期间不一定存在,但在应用程序编译时肯定存在,因为它们会被VisualStudio2008自动移动到目标目录中。

最后,源站点文件是在编译时无法确定是否存在的文件,这些文件可能保存在远程应用程序中或是保存在远程Web网站上,需要在程序运行时临时从外部站点获取。

在WPF应用程序中,如果使用这类文件,必须考虑到文件不存在的情况,并给出相应的处理。

WPF提供了4种类型的应用程序,本章将通过实例详细介绍最常用的两种应用程序--WPF独立应用程序和WPF浏览器应用程序,并将介绍在VisualStudio2008中如何开发WPF应用程序。

9.2WPF独立应用程序

WPF独立应用程序是可以在客户端独立运行的应用程序,它在操作界面、运行方式上和WinForm窗体应用程序十分类似,所以也是最常用的WPF应用程序之一,本节将介绍WPF独立应用程序的开发过程、代码结构、窗体和控件的使用等基础知识。

9.2.1创建WPF独立应用程序

在VisualStudio2008中,要创建一个WPF独立应用程序,只需根据创建向导执行即可,主要包括下面4个步骤:

(1)打开VisualStudio2008开发环境,通过选择"文件"→"新建"→"项目"命令打开"新建项目"对话框。

(3),输入项目名称"HelloWPF",选择项目存放位置,并选中"创建解决方案的目录"复选框。

(4)单击"确定"按钮,完成创建向导的设置,VisualStudio2008会根据模板自动生成WPF独立应用程序的基本框架以及默认的窗体。

通过VisualStudio2008自动生成的WPF独立应用程序的代码结构如图9-3所示,其中,包括以下几个主要部分。

Properties:

包含应用程序版本信息(AssemblyInfo.cs定义)、资源文件(Resources.resx定义)、配置信息(Settings.settings定义)。

引用:

包含WPF应用程序必需的引用,PresentationCore、PresentationFramework是开发WPF应用程序必需的引用。

App.xaml:

应用程序的XAML代码,主导应用程序的启动和退出等,App.xaml.cs是App.xaml的后台代码。

Window1.xaml:

默认启动窗体的XAML代码,Window1.xaml.cs是Window1.xaml的后台代码,该窗体通常根据需要进行修改。

这个结构也是WPF应用程序的典型结构,其中代码文件是可以修改的,XAML代码有可视化设计器,可以轻松地进行界面布局和开发。

WPF应用程序的启动和WindowForm窗体应用程序不一样,WPF应用程序是类似于网页的方式执行,每个窗体类似于一个页面,可以进行导航。

这从应用程序启动代码可以看出,示例代码9-3是App.xaml的代码,其中表示一个应用程序,它的StartupUri属性表示了应用程序第一次启动的窗体为Windows1.xaml。

示例代码9-3:

xmlns="

xmlns:

x="

StartupUri="Window1.xaml">

当一个应用程序中包含多个WPF窗体时,可以修改APP.xaml中的Application节点的StartupUri属性为需要作为主窗体启动的窗体,从而实现从任意窗体启动。

通过代码编辑器编写Window1.xaml和Window1.xaml.cs的代码分别如示例代码9-1和示例代码9-2所示,最后通过选择"调试"→"启动调试"命令生成并执行HelloWPF应用程序,得到的界面如图9-4所示。

生成的可执行程序是以.exe作为扩展名的,默认在项目的Bin目录下。

从图9-4中可以看出,WPF独立应用程序和WinForm窗体应用程序产生的效果非常相似,但后台的实现原理完全不同,而且WPF的很多高级技术在Windows窗体应用程序中无法做到,这些将在深入学习WPF之后才能体会到。

9.2.2WPF窗体介绍

在WPF中,一个独立的窗体用Window来表示,这和WinForm窗体不一样,Window是"窗口"的意思,这很符合Windows视窗系统的初衷。

和WinForm窗体一样,WPF窗体也分成工作区和非工作区两个区域,如图9-5所示,非工作区由WPF自动实现,包括标题栏、图标、最大化按钮、外围边框(白色的边框)、系统菜单。

工作区是由WPF提供的一个矩形区域(灰色的矩形),它具体的内容由开发人员根据软件功能具体实现。

在.NETFramework3.5类库中,所有WPF窗体的基类是System.Windows.Window,该类提供的功能包括绘制窗体、配置窗体外观和管理窗体生命周期等。

每个WPF窗体都有一个所谓的生命周期来表示窗体的存在时间,在窗体生命周期内可以访问,否则不能访问。

WPF窗体的生命周期从窗体对象的实例化开始,然后可以进行重复的打开、激活、停用等操作,最后关闭窗口,退出生命周期,在窗体运行期间,通过捕获用户操作,并以事件机制为开发人员提供响应用户操作的接口。

开发人员在开发一个新的WPF窗体时,主要是对窗体工作区进行设计和编码,包括设置窗体外观、响应窗体事件、设置窗体布局、添加控件、设置控件外观、响应控件事件等。

在以后小节中将介绍窗体的具体开发。

9.2.3修改WPF窗体外观

在VisualStudio2008中,要修改窗体的外观有通过属性管理器修改、通过XAML代码直接修改和通过C#代码修改3种方法,无论哪一种方法,最终修改的都是该窗体对应的XAML代码,但通过属性管理器会更加直观。

在动态更改界面外观时则通过C#代码修改这种方法。

WPF窗体中的每一个界面元素都直接映射到XAML代码中的一个节点,WPF窗体本身也映射到XAML代码中的节点。

节点的属性(Attribute)则对应于窗体类的属性(Property),WPF窗体的外观都可以通过属性进行设置。

如示例代码9-4所示是一个窗体的XAML代码,其中节点表示正在描述一个窗体,Class属性则表示该窗体对应的后台代码类型是UseWPFWindow.Window1,通过该属性,编译器"知道"将这个窗体与哪个C#类型相对应,从而完成前后台代码的合并编译。

示例代码9-4:

href="

xmlns:

x="

Title="示例窗体"Height="300"Width="300"Name="wndMain"

BorderThickness="1"Opacity="2"WindowStyle="ThreeDBorderWindow"

WindowStartupLocation="CenterScreen"Cursor="AppStarting"

Background="Aquamarine"BorderBrush="Azure"OpacityMask="Aquamarine"

MinHeight="100"MinWidth="100"Padding="3"

ForceCursor="False"Icon="icon1.ico"IsEnabled="False"

Foreground="Blue"Loaded="wndMain_Loaded">

在示例代码9-4中,除了Class属性外,其他属性都是对窗体外观属性的一些设置,本段代码设置窗体的背景颜色(Background)为蓝绿色(Aquamarine),定义窗体样式(WindowStyle)为三维边框窗体(ThreeDBorderWindow),标题(Title)为"示例窗体",最小高度和宽度都为100像素等。

这段代码绘制出来的WPF窗体如图9-6所示。

其中最明显的效果是:

背景颜色、标题、图标、边框。

注意:

由于图9-6是在Windows经典主题下进行截图的,所以三维边框效果不明显,如果是在WindowsVista操作系统下运行该代码,可以得到更加美观的效果,包括标题变成蓝色、三维边框等。

从示例代码9-4可以看出,通过XAML修改WPF窗体的外观非常容易,但XAML设置的外观是静态的,要想动态修改,要用到第3种方法,通过C#代码修改窗体类属性的值。

如示例代码9-5所示,它是示例代码9-4对应的Window1类的代码,其中wndMain_Loaded()方法中通过代码的方式设置窗体标题为"示例窗体--1",设置字体大小为10。

示例代码9-5:

namespaceUseWPFWindow

{

///

///Window1.xaml的交互逻辑

///

publicpartialclassWindow1:

Window

{

publicWindow1()

{

InitializeComponent();

}

privatevoidwndMain_Loaded(objectsender,RoutedEventArgse)

{

this.Title="示例窗体--1";

this.FontSize=10;

}

}

}

开发人员可以为WPF设置多种不同的外观特性,比较常用的属性如表9-2所示,其中包括窗体标题、大小、字体、图标、前景色、背景色、边框样式、光标和右键菜单等,但在实际开发中只是根据需要修改其中的一个或多个即可。

表9-2WPF窗体属性

属性名

说明

Tiltle

表示窗体的标题

Icon

表示窗体左上角显示的图标

Cursor

表示窗体中正常状态下使用的光标类型

WindowState

表示窗体处于还原、最大化、最小化中某一种状态

WindowStartupLocation

表示窗体启动时的位置,可选屏幕中央、父窗体中央、默认位置

WindowStyle

表示窗体的边框样式

Width

表示窗体的宽度,单位为像素

Height

表示窗体的高度,单位为像素

MinWidth

表示窗体的最小宽度,单位为像素

MinHeight

表示窗体的最小高度,单位为像素

MaxWidth

表示窗体的最大宽度,单位为像素

MaxHeight

表示窗体的最大高度,单位为像素

Top

表示窗体上边沿相对于桌面的位置,单位为像素

Left

表示窗体左边沿相对于桌面的位置,单位为像素

FontFamily

表示窗体上的字体,如宋体、黑体等

FontSize

表示窗体上字体的大小

FontStretch

表示窗体上字体的压缩或扩展程度

FontStyle

表示窗体上字体的样式

FontWeight

表示窗体上字体的粗细

Foreground

表示窗体中用于绘制前景色的画笔

Background

表示窗体中用于绘制背景颜色的画笔

BorderBrush

表示窗体中用于绘制边框背景的画刷

BorderThickness

表示窗体中边框的宽度,单位为像素

Margin

表示窗体的外边距

Padding

表示窗体的内边距

9.2.4使用WPF窗体事件

事件是.NET中一种非常重要的消息通知机制,WPF虽然尽量使用属性,但事件同样是必不可少的组成部分。

与WinForm窗体一样,WPF窗体也同样具有很多不同的事件,在实际开发中同样需要为这些事件增加

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2