WPF入门教程.docx
《WPF入门教程.docx》由会员分享,可在线阅读,更多相关《WPF入门教程.docx(127页珍藏版)》请在冰豆网上搜索。
![WPF入门教程.docx](https://file1.bdocx.com/fileroot1/2023-4/17/2782bd49-68e4-4d36-8ec8-1e47938335f4/2782bd49-68e4-4d36-8ec8-1e47938335f41.gif)
WPF入门教程
WPF入门指南一:
快速入门
【IT168技术文档】
摘要:
WPF是微软推出的基于WindowsVista的用户界面框架,属于.NETFramework3.0的一部分。
本文旨在通过一些简单的示例,让你对WPF有一个概要的认识。
主要内容
1.概述
2.WPF的组成
3.WPF的编程架构
4.XAML
5.WPF中的控件集
一.概述
WPF(WindowsPresentationFoundation)是微软推出的基于WindowsVista的用户界面框架,属于.NETFramework3.0的一部分。
它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。
二.WPF的组成
WPF的构成组件如下所示,其中PresentationFramework、PresentationCore、milcore三部分是WPF的核心组件:
三.WPF的编程架构
WPF整体的编程架构如图2所示,可以看到,它其中包含了文档服务、用户界面服务、多媒体服务以及一些其它的基本服务。
在用户界面服务中,提供了应用程序服务、部署服务、控件集、布局以及数据绑定等;在多媒体服务中可以看到WPF几乎可以处理所有的媒体类型,包括图片、音频、视频、动画、2D、3D、文本等。
四.XAML
在WPF中提供了两种API,一种是用于普通编程的API,比如我们可以用C#、VB.NET等语言进行编程,另一种是基于XML的API,称为XAML(ExtensibleApplicationMarkupLanguage),引入XAML使得UI代码和应用程序逻辑代码完全分离,它是一种标记语言,支持声明式编程,由于XAML是基于XML的,所以它拥有XML的所有规则和定义,非常容易进行扩展。
看下面两段简单的代码:
XAML代码:
Thisisabutton
C#代码:
Buttonbtn1=newButton();
btn1.Content="Thisisabutton";
btn1.Background=Brushes.Blue;
btn1.Foreground=Brushes.Red;
五.WPF控件集
在WPF中,提供了非常丰富的控件集,如表一所示:
分类 控件
Editing CheckBox,ComboBox,PasswordBox,RadioButton,RichTextBox,Slider,TextBox
List SelectionListBox,ListView,TreeView
UserInformation Label,ProgressBar,Popup,ToolTip
Action Button,ContextMenu,Menu,Separator,StatusBar,Thumb,ToolBar
Appearance Border,BulletDecorator,Decorator,Image,Viewbox
Dialogboxes OpenFileDialog,PrintDialog,SaveFileDialog
Containers Expander,GroupBox,RepeatButton,ScrollBar,ScrollViewer,TabControl
Layout Canvas,DockPanel,Grid,GridSplitter,Panel,StackPanel,VirtualizingStackPanel,WrapPanel
NavigationFrame,Hyperlink
Documents DocumentViewer,FlowDocumentPageViewer,FlowDocumentReader,FlowDocumentScrollViewer
以上只是对WPF作一个概要的介绍,在后面的文章中,我会详细的去讲WPF中一些控件的用法\数据绑定、资源处理、样式与模版、文档编程、多媒体编程等内容。
WPF开发简介
【IT168技术文档】
要赢得世界,必须在恰当的时间做出恰当的事。
这一点,微软做到了。
历经微软DOS,Win31,Win95,Win98,Win2k,WinXP,一路走来,一次比一次热闹,一个比一个精彩、炫丽。
Vista的宣传更是轰轰烈烈,喧嚣日上。
Microsoft总是有能力在恰当的时间制造出意料中的轰动,Vista一经推出便让IT业界趋之若鹜。
一、掀起你的盖头来,让我看看你的脸——.NETFramework3.0
与微软对Vista锣鼓宣天的推广相比,对与之相伴的.NETFramework3.0却显得非常低调。
微软没将它作为宣传重点。
所有的幕后英雄总是默默无闻。
对普通用户而言,他们不关心舞台背后的一切,它们更关心的是前台的表现,是那种炫丽奢华的感觉。
真正热捧幕后英雄的,也是我们这群在幕后默默耕耘的程序员们。
我们对.NETFramework3.0有种自然而然的亲切感,因为我们将在此架构上为Vista编写各种程序。
作为微软精心打造的新一代.NET架构,.NETFramework3.0在Vista时代担当最主要的应用程序接口。
.NET曾被微软寄予厚望和重托,比尔·盖茨先生欲用之来实现一统江湖之志。
事实证明,微软对.Net的推出是成功。
越来越多的应用程序开发者已从Win32和JAVA架构转向.NET开发,越来越多的网站开发人员爱上了。
这让微软看到了希望,他们踌躇满志,他们加紧了对.NET的研发,升级速度越来越快,.NETFramework3.0就是微软在.NETFramework2.0后最重要的升级。
甚至有人惊呼,我们象刘翔一样地飞奔也跟不上微软的速度!
到了.NETFramework3.0,.NET令程序员更称心、并逐渐“倾心”。
在众多的开发环境,微软的开发系列产品,让它在与其它架构的较量中逐渐抢得上风而独在鳌头。
Vista集成.NETFramework3.0,可谓珠联璧合。
可以这么讲,没有.NetFramework3.0这个幕后英雄,Vista会黯淡很多。
.NETFramework3.0(原代号“WinFX”),它构建于.NETFramework2.0之上,同时新增了四个大组件:
WindowsPresentationFoundation(WPF),WindowsWorkflowFoundation(WWF)、WindowsCommunicationFoundation(WCF)和WindowsCardSpace,而这些恰是NETFramework3.0最具价值的部分。
其中,最令人瞩目的是WPF(原来代号为“Avalon”),它是微软全新的图形界面引擎,为各种应用提供统一的界面技术。
程序员在WPF的帮助下,要开发出媲美Mac程序的酷炫界面已不再是遥不可及的奢望。
WindowsWorkflowFoundation用于开发基于工作流的应用程序;WindowsCommunicationFoundation则用于开发面向服务的应用程序,它是新一代通讯和网络开发框架,为不同类型的网络应用程序提供了一个通用的编程模型,尤其是包含其中的PeerChannel模块,以难以置信的方式消除了开发P2P应用程序的复杂性和困难度;而WindowsCardSpace提供数字标志用户控件。
如果把这些林林总总小巧精美的产品比做是珍珠的话,那么,需要一根金线将这些珍珠串起来,珍珠才更有价值,珍珠才熠熠生辉。
而串起这颗珍珠的金线,就是.NETFramework3.0。
二、搭建Vista程序的开发环境
1.如果你使用的是Vista操作系统,那么,由于Vista已集成了.NETFramework3.0,所以不必再单独安装.NETFramework3.0。
但是,如果你是WindowsXP或Windows2003下开发,则必须安装.NETFramework3.0。
2.要开发Vista应用程序,则必须有VistaSDK开发包的支持。
WindowsSDKforWindowsVistaand.NETFramework3.0包含了大量库文件、头文件、文档、示例和工具。
由于Vista操作系统的推出时间比VisualStudio2005开发工具要晚,因此,针对WindowsVista开发的WindowsSDK和.NETFramework3.0并未集成到VisualStudio2005中。
因此,必须下载此SDK,个头不小(当前最新版本是1.15GB),下载和安装时需要你足够的耐心和毅力,相信这个对于我们这些一向好脾气的程序员产不在话下。
3.安装VisualStudio2005(中/英文版均可,建议你习惯使用英文版,因为所有版本都是英文版的首先投放市场,而英文版到中文版,现实有三个月以上的时间差,而对于我们这些母语非英语的开发人员,英语关是一个必须跨越的槛,缘引鲁迅老先生的名言改编一下:
世界并没有自己熟悉的路,走得多了,也就熟了路!
英文看得多了,自然也就熟悉了)。
4.下载并安装VisualStudio2005SP1,VisualStudio2005SP1UpdateforWindowsVista。
VisualStudio2005SP1修补VisualStudio2005许多错误,并增强了一些性能,由于该补丁包要对VisualStudio2005和Vista进行详细检测,安装比较耗时。
5.为了方便程序员开发.NETFramework3.0下的新型应用,微软还推出了VS2005Extensionsfor.NETFramework3.0(Workflow)和VS2005Extensionsfor.NETFramework3.0(WCF&WPF)扩展组件,为VisualStudio2005提供开发WindowsWorkflowFoundation、WindowsCommunicationFoundation和WindowsPresentationFoundation类型应用程序的模版。
6.如果要学WPF,特别建议你安装ExpressionBlend(目前版本是ExpressionBlend2AgustPreview版)。
这样,你可以在vs2005新建一个WPF项目,然后用Blend打开此项目,在Blend中对它进行界面设计和美化等工作,然后再转到vs2005下进行程序编码(两个程序之间支持来回切换)。
三、WPF简介
WindowsPresentationFoundation(WPF)是微软新一代图形系统,运行在.NETFramework3.0架构下,为用户界面、2D/3D图形、文档和媒体提供了统一的描述和操作方法。
基于DirectX9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于WPF。
微软还提供了专门的界面开发语言XAML(eXtensibleApplicationMarkupLanguage,可扩展应用程序标记语言),使得界面描述代码和程序代码得以分开,从而提高了开发效率并有利于团队开发。
XAML是微软为构建下一代应用程序界面而创建的一种新的基于XML的描述性语言,它可对WPF程序的所有界面元素进行定制,从而构成具有WPF风格的界面,并最终形成一个组织良好的XML文档。
由于它最新会被编译成.Net后台代码,因此它能够同后台进行逻辑处理的.NET语言如C#、J#、C++、VB等协同工作,其工作性质类似于ASP.NET中的HTML。
同HTML一样,XAML既可以直接编码,也可以由专门的工具生成。
目前最好的XAML编辑器就是上面我建议你安装的ExpressionBlend了,但你也可以使用WindowsSDKforWindowsVista中的XAMLPad,但功能却显得非常简单。
实际上,大多数WPF程序将同时包含XAML代码和程序代码,首先使用XAML定义程序界面,然后再用.NET语言编写相应的逻辑代码。
跟ASP.NET类似,逻辑代码既可以直接嵌入XAML文件中,也可以将它保存为独立的代码文件。
尽管XAML并非设计WPF程序所必须,按照传统方式使用程序代码来实现界面依然有效,但是如果使用XAML,界面设计和逻辑设计可以完全分离,不但使程序的开发和维护更加方便,而且在团队开发中,可以使程序员专注于业务逻辑的实现,而将界面设计交由专业人员来完成,从而使各类人员在项目中各尽其能各展其长,开发出功能强大、界面一流的WPF程序。
WPF指南之XAML概述
【IT168技术文档】
在我开始看WPF文档开始的几天里,脑子里形成了一种错误的想法:
WPF不就是XAML码?
当时的感觉就是郁闷啦,我学习WPF还得弄这个东西。
给人的第一感觉就是WPF很复杂。
虽然对WPF的熟悉和了解还不是特别多,但现在已经知道这确实是一种错误的想法。
CharlesPetzold先生曾有一篇文章介绍了WPF、XAML的一些关系(TheTwoAPIs)。
文章中说明了WPF为什么很复杂:
因为WPF有两套API,一套用于普通的编码访问(比如C#、VB.NET等其中.NET支持的语言。
而另外一套就是基于XML的API,被称为XAML(ExtensibleApplicationMarkupLanguage)。
XAML实现UI代码和应用程序逻辑代码的分离。
在.NET3.0和WindowsVista中,XAML与WPF一起建立整个的UI。
由于XAML是基于XML的,所以每个XAML代码都肯定是一个完整的XML文件。
XAML继承了XML所有的定义和规则。
XAML与其他XML扩展不同之处就是他所表示的意义。
每个XAML元素是一个.NETCLR类。
基于XML使得我们非常容易扩展和操作XAML。
利用XAML的WPF这种关系,开发人员可以单独的设计漂亮的UI,也许真正的美工会更多的出现。
我们可以把程序逻辑写在单独的文件或者是内联嵌入到XML文件。
在XAML中使用得最多的XML功能应该有三个:
命名空间、属性和子元素。
先看一个简单的XAML的例子:
Class="FirstXAML.Window1"
xmlns="
xmlns:
x="
Title="FirstXAML"Height="200"Width="300"
>
其中的xmlns就是XML中的名字空间,在W3C中xmlns是如下定义的:
XMLnamespacesprovideasimplemethodforqualifyingelementandattributenamesusedinExtensibleMarkupLanguagedocumentsbyassociatingthemwithnamespacesidentifiedbyURIreferences.
简单地说就是xmlns提供了一种方法把URI引用的名字空间定义为当前XML文件的元素和属性的默认命名空间。
这里表示当前这个XML文档,也就是我们的XAML文件,它的默认的命名空间就是
然后是属性和子元素,XML对属性的表示除了可以用Property外,还可以用子元素,在XAML中也是如此,看一个简单的例子:
White
例子当中就使用了属性和子元素两种方式来指定属性。
其中的Width是直接用属性表示,Background属性是用子元素表示。
在多数时候,但不是所有,你可以自由选择这两种表示方式之一。
XAML被编译为BAML(BinaryApplicationMarkupLanguage)文件。
通常,BAML文件比XAML更小,编译后的BAML都是Pre-tokenized的,这样在运行时能更快速的加载、分析XAML等等。
这些BAML文件被以资源的形式嵌入到Assembly当中。
同时生成相应的代码(文件名称是**.g.cs或者**.g.vb),这些代码根据XAML元素分别生成命名的Attribute字段。
以及加载BAML的构造函数。
最后,关于XAML的优点,我附上一点翻译过来的条款,可能更直观。
XAML除了有标记语言、XML的优点外,还有如下一些优点:
用XAML设计UI更简单
XAML比其他的UI设计技术所需编码更少。
XAML设计的UI方便转移、方便在其他环境提交。
比如在Web或WindowsClient。
用XAML设计动态UI非常容易
XAML给UI设计人员带来新的革命,现在所有的设计人员不再需要.NET开发的知识同样可以设计UI。
在不远的将来,终端用户可以看到更漂亮的UI。
WPF指南之WPF的结构
【IT168技术文档】
WPF进入我们的生活已经有一段时间。
个人认为在UI的实践中,用户需要的是易于操作的,更加绚丽的界面。
这两个应该是最基本、也是最重要的宗旨。
而对于开发人员就是要用最简单的方法开发出尽可能漂亮的界面,并且效率也不能太差。
除了在一些Web开发和特殊的应用中,很少有开发组配备单独的美工,至少目前是这样吧!
根据自己目前对WPF的了解程度,感觉WPF在其中某些方面确实有超强的震撼力。
客观上讲,Vista操作系统确实给我们带来了无可比拟的视觉效果。
我自己深有体会,在近2个月的时间里每天都是在Vista下的开发,回家后看到XP系统,始终有些不爽的感觉。
WPF可以认为是MS利用原有.NET框架的一些特色,加上DirextX的产物。
从下图的WPF组件中,我们可以看出最底层仍然是一些内核API。
(以下两张图片都来自互联网。
)
其中红色显示的组件是WPF的核心。
Milcore是一个和DirectX交互的非托管组件,非托管代码能带给我们更高效的处理,能更好的和DirextX交互。
WPF的所有显示都是由Dirext完成的。
milcore中一个非常重要的功能就是Composition引擎,这个引擎对效率的要求很高,它的具体作用稍后介绍。
所以milcore放弃了一些CLR的特征来换取效率。
而另外两个红色的组件都是建立在CLR基础之上,利用了.NET的优势。
至于其中的User32组件有什么作用,偶目前的知道的就是在WPF的某些应用场景中为了某些兼容需要使用User32,其中就有DWM(桌面窗口管理)。
DWM的内容又可以写上一大堆,感兴趣的朋友可以看SDK文档。
我们除了关心WPF的基本结构外,更重要的是WPF提供了什么功能,请看下图:
图中的每个黄色块都是一种媒体类型。
这就表示WPF可以处理几乎所有的媒体类型:
位图、3D、音频、视频和文本等等。
通过WPF,它集成了现在的GDI/GDI+、D3D/OPENGL以及多媒体的DSHOW等等。
所有的东西都是等同对象,不管的3D还是2D,或者文本。
结构图中的Animate块贯串了整个的结构,因为在WPF中我们可以对所有的可视内容进行动画操作。
这是非常让人期待的功能。
Animate下面我们再次看到了Composition引擎,前面提到过它是位于milcore组件中。
开发过程中,我们的界面元素功能有多种,比如图片,视频等等,最后显示到窗口的内容可以认为只是一张图片(准确说是Surface)。
这个引擎的作用就是合成这些图片和视频元素最后进行提交显示。
WPF的数据处理
【IT168技术文档】
数据绑定,这是WPF提供的一个真正的优点。
除了可以用在传统的绑定环境中,数据绑定已经被扩展应用到控件属性上。
学习应用数据绑定,也能真正的体现XAML的好处。
到底什么是数据绑定呢?
也许你从字面上已经理解的很不错了。
通过数据绑定,我们在应用程序UI和程序逻辑之间建立了一种联系。
正常建立绑定后,在数据的值发生改变后,绑定到数据的元素将自动更新、体现出数据的变化。
同样,我们先看几个相关的知识点:
1、DataContext属性。
设置DataContext属性,其实就是指定数据上下文。
那么数据上下文又是什么呢?
又是一个新的概念:
数据上下文允许元素从它的父元素继承数据绑定的数据源。
很简单,在某个元素的DataContext中指定的值,那么在这个元素的子元素也可以使用。
注意,如果我们修改了FrameworkElement或者FrameworkContentElement元素的DataContext属性,那么元素将不再继承DataContext值。
也就是说新设置的属性值将覆盖父元素的设置。
如何设置DataContext属性,稍后说明。
2、数据源的种类。
也许,WPF提供的数据绑定只是实现了一项普通的功能而已,但是,WPF中所支持的多种数据源使得它的数据绑定功能将更加强大。
现在,WPF支持如下四种绑定源:
(1)、任意的CLR对象:
数据源可以是CLR对象的属性、子属性以及Indexers。
对于这种类型的绑定源,WPF采用两种方式来获取属性值:
A)、反射(Reflection);B)、CustomTypeDescriptor,如果