Window Presentation Foundation系列---从HelloWorld认知WPF
- 博客分类:
- 技术杂绘
无能是我自己写的,还是我在学习过程转载别人的文章,都是我学习的一部分,是我学习上成长的痕迹,希望这道痕迹越来越显眼,越来越深刻,无能是对知识的理解,还是对你帮助。是吗?朋友,我们一起努力。
声明:欢迎任何人和组织转载本blog中文章,但必须标记文章原始链接和作者信息。 本文链接:http://blog.csdn.net/li_007/archive/2010/11/02/598 2660.aspx
开拓进取的小乌龟------->CSDN点滴点点滴滴Blog
ok,作为一个Programmer,绝大部分人对一种全新的语言的第一个程序应该都是Hello,World吧。在这里我也从这个开始,一个最简单的Hello World。代码如下: using System; using System.Windows; namespace HelloWorld { class HelloWorld { [STAThread] public static void Main(string [] args) { //Console.WriteLine("Hello, World! This is a most simple WPF Application"); } } } 使用命令行编译,如下 csc /out:.\HelloWorld.exe HelloWorld.cs。编译成功运行,会显示Hello, World! This is a simple WPF Application的一个消息框。其实这个WPF很不完整,没有使用任何的WPF服务。到底真正的WPF包含哪些关键的组件(或者核心的DLL文件)已经WPF能够做些什么?我们可以通过下面的图片来理解.
图 1 上图中标为暗红色的是WPF的三大核心组件,其中milcore组件,它的职责是完成与Direct3D的交互。并且出于效率和安全考虑,milcore由非托管代码实现。WPF 中的所有显示是通过 DirectX 引擎完成的,可实现高效的硬件和软件呈现。WPF 还要求对内存和执行进行精确控制。milcore 中的组合引擎受性能影响关系大,需要放弃 CLR 的许多优点来提高性能。WPF的另外两大核心组件PresentationFramework和PresentationCore都位于通用语言运行库(CLR)之上。而那么就可以看出,WPF的大部分代码都是以托管形式存在的。这两大组件提供了WPF项目需要的函数库和功能库,由于是以托管的形式存在,所以也避免了我们直接操作底层和出现诸如内存泄露的可能性。
图 2 从上面的这幅图可以看出一共分成了五大块(Core Presentation、User Interface Services、Base Services、Document Servies和XPS Viewer): Core Presentation:包含了所有的图形效果,如图形、2D图形、3D图形、文本、音频、视频和显示效果。同时还包括强大的动画效果,动画可以应用前面的所有元素。最下面的那个就是视觉基本元素。
User Interface Services:包含了应用程序服务、部署服务、控件库、布局和数据绑定.
Base Services:提供了XAML支持、提高开发效率、输入和事件的支持、属性系统。
Document Servies和XPS Viewer则提供了基本的打印和表报服务,可以通过这些组件实现自定义的打印和显示效果。
好了,再继续改进Hello World,改进后的代码如下: using System; using System.Windows; namespace HelloWorld { class HelloWorld { [STAThread] public static void Main(string [] args) { //MessageBox.Show("Hello, World! This is a simple WPF Application"); Window wnd = new Window(); wnd.Width = 800; wnd.Height = 600; wnd.Title = "Hello World"; wnd.Show(); Application app = new Application(); app.Run(); } } } 再次通过命令行编译,编译命令如下(这里为了便于理解,我对编译命令做了排版,实际使用中并不需要这样)
csc /target:winexe /out:.\HelloWorld.exe
/reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\presentationfr amework.dll"
/reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\windowsbase.dl l"
/reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\presentationco re.dll"
HelloWorld.cs
注意,在这里引用了prensentationframework.dll、presentationcore.dll和windowsbase.dll这三个WPF的核心DLL。
在这里使用.net Reflector( http://reflectoraddins.codeplex.com/)来查看编译后的exe文件的IL代码如下截图:
图 3 由上图,我们可以清楚地看出来,WPF程序的编译过程,并且可以看到它链接了那些WPF组件。 当然,一个真正的WPF程序远不止一个消息对话框或者一个简单的什么都没有的窗体而已,它是需要有Application类的实例。在这里我们来分别继承一个Application和Windows,具体代码如下: using System; using System.Windows; namespace HelloWorld { class HelloWorld : Application { [STAThread] public static void Main(string [] args) { /* #region // simple I MessageBox.Show("Hello, World! This is a simple WPF Application"); #endregion // simple I #region // simple II Window wnd = new Window(); wnd.Width = 800; wnd.Height = 600; wnd.Title = "Hello World"; wnd.Show(); Application app = new Application(); app.Run(); #endregion // simple II */ #region // simple III HelloWorldWnd wnd = new HelloWorldWnd(); wnd.Show(); HelloWorld helloWorld = new HelloWorld(); helloWorld.Run(); #endregion // simplw III } } class HelloWorldWnd : Window { public HelloWorldWnd() { this.Width = 400; this.Height = 300; this.Title = "Hello World Windows"; } } } 同样使用Reflector来查看IL代码,如下所示:
图 4
图 5 上俩图分别是从Application继承的类HelloWorld和从Window继承的HelloWorldWnd类的IL代码,比较图3,基本上是一样的过程,只不过分别是俩个类而已。 不过通过最后的HelloWorld和HelloWorldWnd类,我们可以看出来,其实可以将WPF的代码分隔开来,HelloWorld里面实现了WPF的"行为";而HelloWorldWnd则实现了WPF的"外观"。这样我们就可以分别将注意力放在不同的事情上,比如设计师可以专注于UI设计,而软件工程师则可以专注于程序的逻辑处理。好了,如果我们为WPF的"外观"的代码定义一种声明式的格式,并且这种格式的文件可以通过工具拖拽等方式来创建,那就Perfect了。是不是描述的有点像flex啊,好了其实我们是幸运的,MS为我们实现了这些。具体的在WPF中表现为XAML格式。用XAML来实现HelloWorldWnd类的代码如下: Height="300"> 其实很简单的,一种声明式的语法,简单地描述了这个windows的特征。XAML的规范定义了一些规则,来把.Net的命名空间、类型、属性、事件等一系列元素映射成XAML的命名空间、元素和特征。XAML被尽可能地设计成直接映射,比如一个XAML元素就映射一个.Net的类名,一个XAML属性(Attribute)就映射成相应类的属性(Property)名或者类的相应的事件名。这样XAML不仅仅只能为WPF类所用,还可以让有默认构造函数的.Net的类可以在XAML文件中直接完成初始化。比如上面的Window类 好了,我们看看Visual Studio .Net 2010创建的一个WPF Application项目的结构图,截图如下:
图 6 从图6中标准WPF程序结构图可以看出,WPF需要PresentationCore、PresentationFramework和WIndowsBase这三个核心的组件的支持;XAML和Code-behind文件的关系;关键字partial在WPF中的作用。 代码隐藏(code-behind)文件的扩展名为.xaml.cs,它包含了xaml中未定义的部分,通过关键字partial让编译器把它和xaml定义合成一个完整的类定义。一般在代码隐藏文件中实现类的一"行为"处理,比如元素是事件等。 通过上面的例子,大概了解清楚了WPF程序的基本框架,当然一些具体的细节,需要自己具体去查询MSDN等资料。
发表评论
-
C#连接数据库的ConnectionString字符串的格式说明
2012-07-06 09:52 1561连接字符串的基本格式包括一系列由分号分隔的关键字/值对。等 ... -
Asp.Net调用Office组件操作时的DCOM配置
2012-07-03 13:44 1276在项目中将数据导出为Excel格式时出现"检索C ... -
用JavaFX访问ArcGIS Server的REST服务(2)
2012-07-02 12:56 859上一篇文章介绍了ArcGIS Server地图服务JSON ... -
fxmq
2012-07-02 12:56 508Flex Message Queue (fxmq) (ba ... -
深入SVG路径~~~在DEGRAFA中使用PATH
2012-07-02 12:56 643在W3SCHOOL的SVG教程 中 可以看出,SVG除了内 ... -
tile布局的ButtonBar
2012-07-02 12:55 644flex/spark" x ... -
关于flex的资料
2012-07-01 10:30 1984====Adobe官方==== Adobe : ... -
为什么用*? 为什么不用*?
2012-07-01 10:28 595离开RoR有一段时间了,本来不想提些负面的东西,不过JE猎 ... -
谈谈我对未来的想法吧
2012-07-01 10:28 355来总行珠海研发中 ... -
实战 OpenLaszlo 与 db4o
2012-07-01 10:28 374本文于去年年底完 ... -
java面笔试总结
2012-07-01 10:28 5192010、10、12 湖南华诺集团面试题集 1、D ... -
[转载]as3面试题
2012-06-30 16:51 715[转载]as3面试题 2011年08 ... -
RIA活动)Adobe(北京2011??8??28)开发者技术日,个人备忘录暨内容概要
2012-06-30 16:51 567RIA活动)Adobe(北京2011??8??28)开发者技术 ... -
评论 (
2012-06-30 16:51 565评论 ( 2010年10月08日 ... -
使用Flex和Actionscript开发Flash游戏――碰撞检测
2012-06-30 16:51 513使用Flex和Actionscript开发Flash游戏――碰 ... -
成为一名高端的Flash游戏开发工程师需要具备的方方面面
2012-06-30 16:51 579成为一名高端的Flash游 ...
相关推荐
Pro-WPF-in-C-Sharp-2008-Windows-Presentation-Foundation-with-NET-3-5-2Ed.pdf
windows-presentation-foundation-4-5-cookbook.zip 2
Windows presentation fundation .net cookbook
Sams.Windows.Presentation.Foundation.Unleashed.Dec.2006\Sams.Windows.Presentation.Foundation.Unleashed.Dec.2006.pdf
windows-presentation-foundation-3.9
wpf开发指南wpf开发指南wpf开发指南wpf开发指南wpf开发指南wpf开发指南
gong-wpf-dragdrop, GongSolutions.WPF.DragDrop 库是WPF的拖动'n'拖放框架 简介GongSolutions.WPF.DragDrop 库是一个易于使用的拖拉'n'拖放框架。特性使用 MVVM: 拖放逻辑可以放在ViewModel中。 代码不需要放在in中...
Windows Presentation Foundation Unleashed by Adam Nathan
本资源为《Windows Presentation Foundation程序设计指南》的中文全本高清扫描Pdf,并附带原书所有章节源代码。该书原作者:Charles Petzold,译者:蔡学镛 《Windows Presentation Foundation程序设计指南》主要...
WPF-3-Building Web Browser Applications with Windows Presentation Foundation
Pro WPF Windows Presentation Foundation in.NET 3.0(PDF) 900多页。 目录: ■CHAPTER 1 Introducing WPF ■CHAPTER 2 XAML ■CHAPTER 3 The Application ■CHAPTER 4 Layout ■CHAPTER 5 Content ■CHAPTER 6...
Pro WPF 4.5 in C#: Windows Presentation Foundation in .NET 4.5 (4th ed. 2012 Edition) =========================== Microsoft's Windows Presentation Foundation (WPF) provides you with a development ...
WPF(Windows Presentation Foundation,视窗展示[呈现/展现/显示/表示]基础)是Windows的新一代图形子系统,它为开发人员提供了统一的编程模型,可用于构建合并了UI、媒体和文档的丰富Windows智能客户端用户体验。
windows presentation foundation (wpf) building data-driven applications with wpf
[奥莱理] Programming Windows Presentation Foundation (英文版) [奥莱理] Programming Windows Presentation Foundation (E-Book) ☆ 出版信息:☆ [作者信息] Chris Sells, Ian Griffiths [出版机构] 奥莱理 ...
Pro WPF in C# 2010 Windows Presentation Foundation in .NET 4.0
【原 书 名】 Windows Presentation Foundation Unleashed 【原出版社】 Sams 【作 者】Adam Nathan [同作者作品] 【丛 书 名】 英文原版系列图书 【出 版 社】 Sams 【书 号】 0672328917 ...
c#-的WPF---MVVM例子,大家共同学习
Microsoft .Net Framework 3.5-Windows Presentation Foundation.微软70-502mcts考试自学教程。