`
lovnet
  • 浏览: 6865692 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

深入浅出WPF——x:Class详解

阅读更多

深入浅出WPF——x:Class详解

小序:

按照惯例,我会在年末的最后一篇文章里感谢所有帮助过我的人们。今年也不例外,只是形式简单一些。

祝所有帮助过我的朋友、同事、学生和兄弟姐妹们——2009年身体健康、平安快乐、财源滚滚。愿2009年的中国,平安祥和、远离各种灾难,大家的工资涨上去、房价降下来,金融危机早点结束。

祝我的父亲母亲,健康长寿!

正文:

……上文省略若干千字……

还剩下x:Class="MyFirstWpfApplication.Window1"这个Attributex:前缀说明这个Attribute来自于x映射的名称空间——前面我刚刚分析过,这个名称空间是对应XAML解析功能的。x:Class,顾名思义它与类有此关系,是何种关系呢?让我们做个有趣的实验:

首先,我们把x:Class="MyFirstWpfApplication.Window1"这个Attribute删掉,再到Window1.xaml.cs文件里,把InitializeComponent();这个函数调用也删掉。编译程序,你会发现程序仍然可以运行。为什么呢?打开App.xaml这个文件,你能发现这样一个Attribute——StartupUri="Window1.xaml",它是在告诉编译器把由Window1.xaml解析后生成的窗体作为程序启动时的主窗体。也就是说,只要Window1.xaml文件能够被正确解析成一个窗体,程序就可以正常运行。

然后,我们恢复x:Class这个Attribute,更改它的值为x:Class="MyFirstWpfApplication.WindowABC"。编译之后,仍然可以正确运行。这时,我们使用IL Disassembler(中间语言反编译器)打开项目的编译结果,你会发现在由项目编译生成的程序集里包含一个名为WindowABC的类。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="Picture_x0020_6" style="VISIBILITY: visible; WIDTH: 137.25pt; HEIGHT: 74.25pt; mso-wrap-style: square" o:spid="_x0000_i1026" type="#_x0000_t75" alt="p0008.png"><imagedata src="file:///C:%5CUsers%5CADMINI~1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.png" o:title="p0008"></imagedata></shape>

<shape id="Picture_x0020_7" style="VISIBILITY: visible; WIDTH: 176.25pt; HEIGHT: 149.25pt; mso-wrap-style: square" o:spid="_x0000_i1025" type="#_x0000_t75" alt="p0007.png"><imagedata src="file:///C:%5CUsers%5CADMINI~1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image003.png" o:title="p0007"><font color="#000000" size="3"></font></imagedata></shape>

这说明,x:Class这个Attribute的作用是当XAML解析器将包含它的标签解析成C#类后,这个类的类名是什么。这里,我们已经触及到的XAML的本质。前面我们已经看到,示例代码的结构就是使用XAML语言直观地告诉我们,当然被设计的窗体是在一个<Window>里嵌套一个<Grid>。如果使用C#来完成同样的设计呢?显然,我们不可能去更改Window这个类,我们能做的是从Window类派生出一个类来(比如叫WindowABC),再为这个类添加一个Grid类型的字段,然后把这个字段在初始化的时候赋值给派生类的内容属性。代码看起来大概是这样:

using System.Windows;

using System.Windows.Controls;

class WindowABC : Window

{

private Grid grid;

public WindowABC()

{

grid = new Grid();

this.Content = grid;

}

}

最后,让我们回到最初的代码。你可能会问:在XAML里有x:Class="MyFirstWpfApplication.Window1",在Window1.xaml.cs里也声明了Window1这个类,难道它们不会冲突吗?仔细看看Window1.xaml.csWindow1类的声明就知道了——在声明时使用了partial这个关键字。使用partial关键字,可以把一个类分拆在多处定义,只要各部分代码不冲突即可。显然,由XAML解析器生成的Window1类在声明时也使用了partial关键字,这样,由XAML解析成的类和C#文件里定义的部分就合而为一了。正是由于这种partial机制,我们可以把类的逻辑代码留在.cs文件里、用C#语言来实现,而把那些与声明及布局UI元素相关的代码分离出去,实现UI与逻辑分离。并且,用于绘制UI的代码(比如声明控件类型的字段、设置它们的外观和布局等)也不必再使用C#语言——使用XAMLXAML编辑工具就能轻松搞定!

分享到:
评论

相关推荐

    深入浅出WPF-刘铁猛-MVVM视频源代码,MVVM入门与提高视频对应的源代码

    **深入浅出WPF——MVVM模式解析** 在软件开发领域,Windows Presentation Foundation(WPF)是Microsoft推出的一种用于构建Windows桌面应用程序的技术,它提供了丰富的用户界面和图形渲染能力。而MVVM(Model-View-...

    《深入浅出 WPF》 完整目录版

    《深入浅出 WPF》 完整目录版是一本非常好动书,并且做了完整目录

    WPF深入浅出书上全部实例源码,非常详细

    **深入浅出WPF:全书实例源码详解** Windows Presentation Foundation(WPF),作为.NET Framework的一部分,是Microsoft推出的一种全新的用户界面框架,用于构建Windows桌面应用程序。它提供了丰富的图形层、数据...

    WPF深入浅出高清PDF

    ### WPF深入浅出知识点详解 #### 一、引言:生产力与软件开发工具的进化 自古以来,生产工具的先进程度一直是衡量生产力水平的关键指标。随着科技的进步,计算机软件开发领域同样经历了一系列工具和技术的革新。从...

    高清版WPF深入浅出.pdf

    本书《深入浅出WPF》是刘铁猛所著,目的是为了深入浅出地介绍WPF技术。作者利用丰富的开发经验和对技术的深刻理解,将WPF的复杂概念分解成浅显易懂的知识点。全书分为两个主要部分,第一部分主要介绍WPF开发的基础...

    WPF深入浅出电子书

    WPF深入浅出电子书,可以下载放到手机里看,非常的方便的。

    wpf深入浅出资源文件,需要源码的可以给我@我

    **WPF 深入浅出:资源文件与源码详解** Windows Presentation Foundation(WPF)是Microsoft .NET Framework中的一个关键组件,用于构建富客户端应用程序。它提供了丰富的图形渲染能力、强大的数据绑定机制以及对...

    WPF深入浅出(高清.书签)

    《WPF深入浅出》是一本专注于Windows Presentation Foundation(WPF)技术的书籍,由国内作者撰写,确保了内容的准确性和本地化适应性。WPF是微软.NET Framework中的一个关键组件,它提供了构建富客户端应用程序的...

    WPF深入浅出_包含源代码

    **WPF 深入浅出 - 包含源代码** Windows Presentation Foundation(WPF),是微软.NET Framework的重要组成部分,它提供了一种全新的用户界面开发技术,用于构建丰富的、交互式的桌面应用程序。这本书《WPF深入浅出...

    WPF编程宝典:使用C# 2012和.NET 4.5(第4版),完整扫描版

    WPF编程宝典:使用C# 2012和.NET 4.5(第4版),完整扫描版. 带书签,经本人整理裁剪适合手机屏,1-3章为清晰版,其它为扫描版

    WPF编程宝典:使用C# 2012和.NET 4.5 第4版 PDF与源码

    《WPF编程宝典:使用C# 2012和.NET 4.5 第4版》是一本全面深入探讨Windows Presentation Foundation (WPF) 的技术书籍,它以C# 2012和.NET Framework 4.5为开发语言和平台。这本书详细介绍了如何利用WPF创建现代化、...

    WPF深入浅出.zip

    在《WPF深入浅出》这本书中,你将会深入学习WPF的核心概念和技术,包括: 1. **XAML语言**:WPF的主要设计工具,XML-based的语言,用于描述UI元素和它们的属性。通过XAML,开发者可以以声明式的方式构建UI,使得...

    wpf 深入浅出 pdf

    ### WPF深入浅出知识点概览 #### 一、WPF简介 WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows客户端应用程序的框架。它提供了丰富的功能集,包括矢量图形支持、基于XAML的标记语言、数据...

    WPF编程宝典:C#(2010版).part1

    WPF编程宝典:C#(2010版) PDF 高清版 全 分三个卷 哥自己在淘宝上买的PDF,哥花的是钱换的是积分,而且换的积分只是为了更多的上传好的资料共享给大家,如果你要是觉得哥要的分高的可以无视飘过哈,哥不怪你,也请...

    WPF编程宝典:C#(2010版).part2

    WPF编程宝典:C#(2010版) PDF 高清版 全 分三个卷 哥自己在淘宝上买的PDF,哥花的是钱换的是积分,而且换的积分只是为了更多的上传好的资料共享给大家,如果你要是觉得哥要的分高的可以无视飘过哈,哥不怪你,也请...

    WPF编程宝典:C#(2010版).part3

    WPF编程宝典:C#(2010版) PDF 高清版 中文版 全 分三个卷 哥自己在淘宝上买的PDF,哥花的是钱换的是积分,而且换的积分只是为了更多的上传好的资料共享给大家,如果你要是觉得哥要的分高的可以无视飘过哈,哥不怪你...

Global site tag (gtag.js) - Google Analytics