WPF专业编程指南(含光盘1张)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-20 23:51:34

点击下载

作者:李应保

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

WPF专业编程指南(含光盘1张)

WPF专业编程指南(含光盘1张)试读:

前言

2008年在世界经济历史上是一个不平凡的一年,在这一年中,美国的五大投资银行有两家破产。金融危机席卷全球,美国的失业率在过去的一年从4%飙升到了10%,有些城市的失业率甚至高达20%;加拿大的就业数字也是惨不忍睹,多伦多的失业率剧升到了12%(2009年8月数据)。在这样暗淡的经济背景下,有关WPF的工作却在快速增长,过去两年,和WPF相关的工作职位在北美和欧洲每半年翻一番,WPF初级职位的薪水在5万美元到7万美元之间,高级职位在10万美元以上。一般来说,新的开发平台在中国的应用比欧美要晚2~3年,但随着互联网的普及和软件开发外包到中国,这一迟后时间正在缩短。可以预见,在未来几年内,和WPF相关的工作职位也会在中国快速增长;所以,学习WPF编程技术正当其时,拥有WPF技术必将使你在职场上更加挥洒自如,也就是说,学习WPF就是获取新的工作机遇。WPF是基于.NET的新一代界面开发平台,它实现了桌面应用程序和互联网应用程序的统一编程,实现了程序员长期梦想的数据驱动用户界面,融合了动画、多媒体的功能,跨越了图形和控件、控件和排版等技术上的界限,在很短的时间内实现并超越了Flash和PDF的相关功能。近年来微软在软件开发上的投资额已和中等国家的GDP相当,其中.NET是微软最大的投资项目。在.NET 2.0之后,微软停止了WinForm的开发,而WPF实际上是微软在今后一段时间内唯一要不断投入的用户界面开发平台,这一平台在Vista、Windows 7 和Window Server上得到了广泛的支持。建立在WPF上的应用程序将会自动随着.NET的不断开发而自动拓展新的功能:把WPF和WCF(Windows Communication Foundation)技术相结合,可以很容易地实现面向服务的软件架构(SOA,Service Oriented Architecture);WPF对图形流的支持,使得开发GIS应用程序更加方便;基于SilverLight和Ajax技术是互联网开发的新热点。所以,企业把应用程序的界面建立在WPF之上,不仅可以极大地缩短开发周期,而且可以把同一技术用在不同的项目上,从而极大地降低开发成本。比如过去开发桌面应用程序和互联网应用程序一直是两个不同的开发团队,而使用WPF,我们只需要一个开发团队。在过去的20年内,微软一直是用户界面开发的领跑者;若企业把应用程序建立在WPF之上,就不会担心落伍。所以,应用WPF就是降低企业的开发成本。本书特点本书深入浅出地介绍了WPF中的各种新概念,使用了大量图表和实例力图以整体的形式把WPF展现在读者的面前。笔者推崇Scott Meyers的写作风格(Scott Meyers的C++系列丛书在软件界有广泛的影响——笔者注),即以散文的笔调描述技术细节,以避免枯操的叙述;希望读者在阅读本书时有一种像朋友在一起聚会的感觉,边喝啤酒边聊天,在聚会结束时,您会发现自己已经掌握了WPF技术。因此,阅读本书是通向WPF专业编程的捷径。由于WPF是在.NET 3.0 之后引入的,故读者在使用WPF之前应该已经熟悉 .NET的编程环境、C#语言等基本知识。本书使用简单的UML(Unified Modeling Language)描述WPF类和类间的关系,若您具有UML的基本知识,对阅读本书会有帮助。书中的例子在Visual Studio 2008 和.NET FrameWork 3.5上调试过,有时笔者也使用了微软的Expression Blend 2.0调试,但后者不是必需的。本书光盘使用说明本书的配书光盘含有约100MB的源程序,所用的语言为C#和XAML。所有的例程在Visual Studio 2008 和.NET Framework 3.5上调试通过,笔者在创建某些例程时,使用过Microsoft Blend 2.0。Microsoft Blend工具在创建WPF界面时非常有用,但对于运行本书的例程不是必需的。本光盘的内容是对本书的补充,因书中着重介绍WPF编程模型和基本概念,光盘中则含有完整的源代码。1.光盘中的目录使用Yingbao.Chapterxx格式,如第1章的例程在Yingbao.Chapter1的目录下,第2章的例程在Yingbao.Chapter2的目录下等。全书共18章,整个光盘含有18个目录。2.在每个目录下有一个相应的Visual Studio解决方案文件,其文件名采用Yingbao.Chapterxx.sln格式,如第1章Visual Studio解决方案文件名为Yingbao.Chapter1.sln,第2章Visual Studio解决方案文件名为Yingbao.Chapter2.sln等。该文件中含有一个或多个项目,如Yingbao.Chapter13解决方案中含有六个项目。运行某个项目,您需要在Visual Studio中的Solution explore窗口下单击鼠标右键,在弹出菜单中选择“Set as StartUp Project”条目,然后,您只要按下“F5”功能键,或在Visual Studio 的“Debug”菜单下选择“Start Debug”即可。3.例程中命名空间的名字采用Yingbao.Chapterxx的格式,如第1章所有例程中的类都在Yingbao.Chapter1命名空间中,第2章的所有例程中的类都在Yingbao.Chapter2命名空间中。虽然对于本书的例程来说使用不同的命名空间不是必需的,但对于组织大型项目,使用命名空间是良好的习惯。4.例程中的类名、属性名、域名、方法名采用通用电气(GE)编程规范,读者也可用其他的公司或自己公司的编程规范。感谢写作是一个费时费力的工作,笔者在写作本书的时候,得到了家人的支持和理解。电子工业出版社的杨福平副总编和袁金敏编辑对本书的出版做了大量的工作,笔者在此表示衷心感谢。联系方式最后,若您有什么建议和意见或者发现书中的错误,请和笔者联系:Yingbao.Li@gmail.com。李应保2009年9月8日于加拿大第一篇 W PF编程基础第1章 WPF应用程序第2章 XAML语言第3章 WPF排版第4章 WPF中的属性系统第5章 画笔和画刷第1章 W PF应用程序本章讨论WPF应用程序的创建,运行及退出时的技术细节。涉及创建WPF应用程序的三个重要的类:Application、Window和Page、应用程序的异常处理、发布等话题。1.1 WPF应用程序的创建在Window s操作系统中,所有的应用程序都在自己独立的进程中运行, WPF也不例外。每个进程都有自己独立的内存地址,进程间的数据是隔离的,进程之间不会相互影响。当应用程序创建进程时,同时创建一个或多个线程。线程在自己的进程空间中运行,在底层, WPF仍然使用Window s的消息驱动机制来实现事务处理。创建WPF应用程序从创建Application类开始。WPF的主要功能是人机交互,我们可以把当代人机界面(UI)程序归为两大类:一类是桌面(desktop)应用程序;一类是互联网(Web)应用程序。WPF首次实现了对这两类应用程序的统一编程。让我们来创建一个简单的WPF程序:首先,用Yingbao.Chapter1声明命名空间,并将在本书的所有例程中使用这一惯例。第1章的例程在Yingbao.Chapter1的命名空间中,第2章的例程将在Yingbao. Chapter2的命名空间中等。然后,引入了.NET中的两个命名空间:System和System.Windows。System命名空间提供.NET的基本服务,System.Windows中含有WPF的基本服务。Microsoft把WPF所用的类,都放在System.Windows的命名空间或其下面的命名空间中,如System.Windows.Controls、System.Windows.Input,等等。在Visual Studio的项目下,引入相应的Assembly,这样就可以使用这些命名空间中的类了。Main函数是WPF程序的入口点,它必须是静态(static)的。所有WPF程序,都必须在单一线程公寓(STA)模型中运行。STA来源于COM,若对此概念不熟悉,可以参考COM的相关著作或文章。在Main函数前加上STAThread属性,就是满足WPF的这一要求,即UI不能在多线程的环境中运行。在这个程序里,创建了一个Window类实例;Window类是管理WPF桌面应用程序的窗口类。其Title属性就是窗口标题,而Content属性是窗口中所要显示的内容。和.NET 1.0中的Form显示窗口一样,需要调用Show()方法,最后创建了Application类实例,并调用其Run()方法。Run()方法创建了和Win32一样的消息分配机制,它会接收操作系统发给应用程序的消息,并对相关消息进行响应。这个程序的运行结果如图1-1所示。图1-1 Hello WPF!你也可以不用调用Window类中的Show方法,而使用更为简洁的形式:在这种情况下,Run方法将会自动调用win.Show()。1.2 Dos窗口当用Visual Studio创建WPF应用程序的时候,可以设置所创建的应用程序为带有Dos窗口的应用程序,还是桌面应用程序,方法如下:在Visual Studio中,选择所要设定的项目,单击鼠标右键,选择“Property”,Visual Studio显示图1-2所示的窗口。在output type下拉控件里,可以选择Console Application、Windows Application和Class Library。图1-2 在Visual Studio中设置应用程序项目的类型有意思的是,当你选择Console Application时,WPF并不阻止你创建窗口,而是在创建桌面窗口的时候同时创建Dos命令行窗口,这一点和Java相似。笔者觉得使用Dos命令行窗口来调试程序非常方便,比如在上面的这段程序里加入Console.WriteLine(“….”);则这些信息会在Dos命令行窗口中显示。当调试好WPF程序之后,再把Output Type改为Windows Application。若项目是创建一个类库,就要把Output Type设为Class Library。在一个进程中,只能创建一个Applic ation实例,但是可以创建多个Window实例,每个Window实例就是一个可以显示的窗口。1.3 WPF应用程序的启动和终止表1-1列出了和应用程序生存期相关的事件和方法,通常在相关事件发生时, WPF首先调用Applic ation类中的相应方法,然后再产生相关事件。所以,这些方法常常有相应的事件相对应。例如OnAc tiva ted方法和Ac tivated事件、OnDeac tivated方法和DeAc tivated事件,等等。要考察WPF应用程序的启动和终止过程,有两种方法:其一是从Application类中派生出自己的类,并使用虚函数覆盖技术来观察Applic ation类在运行时调用虚函数的过程;其二是处理Applic ation类中的相关事件。表1-1 Application类中与应用程序生存期相关的事件让我们来看看第一种方法:这段程序的运行结果如图1-3所示。图1-3 考察Application中的事件1.4 输入参数在WinForm应用程序中,应用程序的入口函数是一个Main方法,我们可以向该方法传递一个命令行参数。WPF也可以用类似的方法,而且更加灵活。方法1:在Application类中定义带参数的Main方法,如下面的DesktopApp:方法3:移植OnStartUp方法方法1和方法2都需要处理入口函数Main。我们在Visual Studio中创建WPF应用程序,通常使用项目模板,该项目模板创建的Application类由两部分组成,一部分是XAML,一部分是后台C#。WPF在编译时,会自动产生一个Main函数,即在这种情况下,我们不能定义自己的Main方法。这时候若要处理命令行参数,则要移植OnStartUp方法:1.5 在Xaml中创建Application上面的例子是使用C#代码来创建Application的类。实际上在WPF应用程序中更常用的是使用Xaml来创建Application类实例。上面提到在Visual Studio里创建WPF应用程序通常使用项目模板,现在来考察使用Visual Studio项目模板创建WPF应用程序的过程。在File菜单中选择“New Project”, Visual Studio会显示图1-4所示的会话框,你可以选择WPF Application(桌面应用程序)或WPF Browser Application(Silverlight应用程序)。当选择WPF Application项目模板时,Visual Studio自动创建4个文件:App.xaml、App.xaml.cs、Window1.xaml和Window1.xaml.cs。这4个文件移植了两个类,App.xaml和App.xaml.cs创建的是App类,它从Application类中派生出来。Window1.xaml和Window1.xaml.cs创建的是Window1类,它从类Window中派生出来。让我们来看一下App.xaml:图1-4 Visual Studio中的项目模板x:Class属性把xaml所对应的后台C#类联系起来,在这里是Yingbao.Chapter1.WPFStartUp.App,其中App是类名,Yingbao.Chapter1.WPFStartup是命名空间。App.xaml在编译后产生一个部分类,它位于所创建的项目目录下的obj\Debug子目录中,文件名为App.g.cs。这个文件中的内容如下:它在App类中加入了两个方法,InitializeComponent和Main。Main方法和我们在前面直接创建HelloWPF类时所移植的Main方法类似,由于一个应用程序只能有一个入口点,所以在App.xaml.cs中不能再移植Main方法。在InitializeComponent()方法中,设置了StartupUri属性:它是对App.xaml中的StartupUri="Window1.xaml"翻译。我们可以在App.cs中移植应用程序的逻辑,下面是App.cs中的App部分类:Visual Studio为我们产生一个框架。与App类似,Visual Studio产生的Window1.xaml,也是一个部分类,Window1的另一部分类在C#中。其中的x:Class属性也是把XAML和后台的C#类联系起来。它只产生一个构造函数Window1,其中调用了InitializeComponent方法,InitializeComponent在哪里呢?在xaml编译后产生的AppWin.g.cs文件中:本书以下的章节都是以Visual StudioWPF项目模板所产生的代码为基础,小结一下:● xaml中的x:Class属性把xaml和后台C#类联系起来。● VisualStudio利用.NET2.0引入的部分类(partialclass)技术,把一个类分为两部分表述:一个是xaml文件,一个是C#文件。编译后,xaml文件会产生一个后缀为.g.cs的C#文件,是xaml所产生的部分类。● Application中的StartupUri设置了应用程序启动时的主窗口。1.6 窗口大小Window类中的Width和He ight属性确定窗口的大小,可以在xaml或C#中设置该属性:在上面这段程序中,我们把窗口的高度和宽度都设为300。你也许会问,300这个数字代表多大?首先,300并不是屏幕上的300个点( pixel ),否则Width和Height属性就不会是浮点数。WPF用的单位是1/96英寸。这个单位和显示器上实际的图素点没有关系,因此上面的300300(3.125英寸3.125英寸)窗口在1024 768和19201080分辨率的显示器上显示的结果是一样的。1.7 互联网应用程序在WPF中创建互联网应用程序和创建桌面程序是一样的。在桌面应用程序里,XAML的顶层元素为Window ,在互联网应用程序里,XAML的顶层元素为Page。例如下面的网页:该网页在IE 7中的显示结果如图1-5所示。图1-5 IE 7中显示的WPF网页1.8 应用程序的异常处理现代软件工程有一个基本的出错处理原则:就近处理程序异常。比如说,你有如下Class A和Class B两段程序:这两段程序在正常的情况下,没什么问题,但如果Class A中的y为0,那么z=x/y就会出错,一般情况下,我们需要把Class A中的方法Divide改为:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载