当前位置: 首页 > 编程日记 > 正文

深入浅出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的类。

      这说明,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编辑工具就能轻松搞定!




本文转自 水之真谛 51CTO博客,原文链接:http://blog.51cto.com/liutiemeng/129503,如需转载请自行联系原作者

相关文章:

SQL Date 函数

MySQL Date 函数 函数描述NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()提取日期或日期/时间表达式的日期部分EXTRACT()返回日期/时间按的单独部分DATE_ADD()给日期添加指定的时间间隔DATE_SUB()从日期减去指定的时间间隔DATEDIFF()返回两个…

什么是java常量

相信很多在学java技术的同学&#xff0c;对java常量这个并不陌生&#xff0c;什么是java常量呢?java常量就是在程序中固定不变的值&#xff0c;是不能改变的数据。例如数字1、字符“a”、浮点数3.2等。在Java中&#xff0c;常量包括整型常量、浮点数常量、布尔常量、字符常量等…

Numpy入门教程:02. 索引、切片与迭代

背景 什么是 NumPy 呢&#xff1f; NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库&#xff0c;可以帮助程序员轻松地进行数值计算&#xff0c;通常应用于以下场景&#xff1a; 执行各种数学任务&#xff0c;如&#xff1a;数值积分、微分、…

php中OR与|| AND与的区别

本身没有区别&#xff0c;习惯问题 &#xff0c;但是有时候牵涉到运算符优先级的问题&#xff0c;结果会不同&#xff0c;记录下。例如&#xff1a;$p 6 or 0;var_dump($p);//int(6)$p 6 || 0;var_dump($p);//bool(true)$p 6 and 0;var_dump($p); //int(6) $p 6 &&…

beego数据输出

概览直接输出字符串模板数据输出 静态模板数据输出动态模板数据输出json格式数据输出xml格式数据输出jsonp调用概览 直接输出字符串 通过beego.Controller.Ctx.WriteString()方法可以直接向http response body中输出字符串 beego中的函数定义如下&#xff1a; // WriteString W…

缓存和web缓存分别是什么?

什么是缓存? 缓存(cache)&#xff0c;原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器&#xff0c;通常它不像系统主存那样使用DRAM技术&#xff0c;而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。 什么是web缓存…

【Python】12、字典的实现

一、字典的实现 dic 可以使用list来实现 i&#xff08;索引&#xff09; hash(key) % solt(槽位数) 此时i重复了怎么办&#xff08;hash冲突&#xff09;&#xff1f; 1、拉链法 每个槽位上拉一个List&#xff0c;就是拉链法 1234567891011121314151617181920212223242526272…

Numpy入门教程:03.数组操作

背景 什么是 NumPy 呢&#xff1f; NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库&#xff0c;可以帮助程序员轻松地进行数值计算&#xff0c;通常应用于以下场景&#xff1a; 执行各种数学任务&#xff0c;如&#xff1a;数值积分、微分、…

13个JavaScript图表图形绘制插件

由于绘制矢量图的不同技术愈发成熟以及现代浏览器所具备的更强大的计算能力等原因&#xff0c;目前网上出现了越来越多免费 的JavaScript图表和图形绘制解决方案。在本文中就将分享13个优秀实用的JavaScript图表和图形绘制插件&#xff0c;它们少数是独立的框架&#xff0c;大多…

Java swing是什么?有什么作用?

在早期JDK1.0发布时&#xff0c;Sun公司就为GUI开发提供了一套基础类库&#xff0c;这套类库被称为AWT(Abstract Window Toolkit)&#xff0c;即抽象窗口工具包。AWT的起初设想就是为了统一实现不同操作系统的图像界面&#xff0c;但问题是&#xff0c;不同操作系统图形库的功能…

python之网络爬虫

一、演绎自已的北爱 踏上北漂的航班&#xff0c;开始演奏了我自已的北京爱情故事 二、爬虫1 1、网络爬虫的思路 首先&#xff1a;指定一个url&#xff0c;然后打开这个url地址&#xff0c;读其中的内容。 其次&#xff1a;从读取的内容中过滤关键字&#xff1b;这一步是关键&a…

Numpy入门教程:04. 数学函数

背景 什么是 NumPy 呢&#xff1f; NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库&#xff0c;可以帮助程序员轻松地进行数值计算&#xff0c;通常应用于以下场景&#xff1a; 执行各种数学任务&#xff0c;如&#xff1a;数值积分、微分、…

SAXParserFactory之求解

SAX是Simple API for XML的简称,在Android里面提供对XML文件的解析接口方法&#xff0c;如果给我们一个XML文件&#xff0c;要求把里面我们关心的数据解析出来&#xff0c;我们就可以使用SAX技术&#xff0c;在具体使用中&#xff0c;会对XML文件的每一个字符逐一读取并出发相应…

学习Java知识应该注意哪些基础原则

想要做java程序猿&#xff0c;学习起来没有那么快的&#xff0c;尤其是零基础学员&#xff0c;java技术在学习的过程中是比较枯燥的&#xff0c;下面小编就为大家详细的介绍一下学习Java知识应该注意哪些基础原则&#xff0c;方便大家在学习的时候能够更加有效率! 学习Java知识…

Numpy入门教程:05. 逻辑函数

背景 什么是 NumPy 呢&#xff1f; NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库&#xff0c;可以帮助程序员轻松地进行数值计算&#xff0c;通常应用于以下场景&#xff1a; 执行各种数学任务&#xff0c;如&#xff1a;数值积分、微分、…

git获取指定release版本代码

首先手里必须有release的版本的备份出来的/.repo/manifests/default.xml文件&#xff0c;该文件记录了每个git库的在该版本下的具体的版本情况&#xff0c;整个代码的sync都是依据他来的&#xff1b; 1、repo sync 将本地代码更新至最新&#xff1b; 2、将手里的manifests.xml&…

【内网福音】如何离线部署Rancher

2019独角兽企业重金招聘Python工程师标准>>> 对于在公司内网环境中、无法访问互联网的用户而言&#xff0c;离线安装部署Rancher是解决问题的关键。本文是Rancher离线部署教程&#xff0c;专为内网用户排坑解难。 版本说明 OS&#xff1a;Centos7.3 Docker version:…

JAVA工资高吗

JAVA工资高吗?很多人都是非常关注这个问题的&#xff0c;近几年&#xff0c;java技术在互联网行业有了自己的一席之地&#xff0c;越来越多的人都投身到java技术行业&#xff0c;下面我们来看看详细的介绍。 JAVA工资高吗? 近年来,在美国、加拿大、澳大利亚、新加坡等发达国家…

Numpy入门教程:06. 排序,搜索和计数

背景 什么是 NumPy 呢&#xff1f; NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库&#xff0c;可以帮助程序员轻松地进行数值计算&#xff0c;通常应用于以下场景&#xff1a; 执行各种数学任务&#xff0c;如&#xff1a;数值积分、微分、…

活动目录在构建核心过程中的八个关键点(下)

活动目录是一个面向Windows Server级别的目录服务。在之前的博客文章中介绍了活动目录设计中需要遵循的七个原则&#xff0c;今天在这里讲解有关《活动目录构建核心关键点》。 全文请见专题&#xff1a;http://os.51cto.com/art/201104/254054.htm 5. LDAP协议简介 LDAP的英文全…

smarty变量调节器--count_words[计算词数]

计算变量里的词数 。 Example 5-7. count_words <?php$smarty->assign(articleTitle, Dealers Will Hear Car Talk at Noon.);?>Where template is:{$articleTitle}{$articleTitle|count_words}This will output:Dealers Will Hear Car Talk at Noon.7 See also cou…

如何开发属于自己的第一个Java程序

学习java技术都是循序渐进的&#xff0c;搭建好了Java开发环境之后&#xff0c;下面就来学习一下如何开发Java程序。为了让初学者更好地完成第一个Java程序&#xff0c;接下来小编通过几个步骤进行逐一讲解。 1.编写Java源文件 在D盘根目录下新建一个test文件夹&#xff0c;并在…

Numpy入门教程:07. 随机抽样

背景 什么是 NumPy 呢&#xff1f; NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库&#xff0c;可以帮助程序员轻松地进行数值计算&#xff0c;通常应用于以下场景&#xff1a; 执行各种数学任务&#xff0c;如&#xff1a;数值积分、微分、…

如何成为一个Android高手

很多Android开发者已经度过了初级、中级&#xff0c;如何成为一个Android高手呢&#xff1f; eoeAndroid就各个级别的程序员应该掌握哪些内容作为下面分类. 一、初级 1. 拥有娴熟的Java基础&#xff0c;理解设计模式&#xff0c;比如OOP语言的工厂模式要懂得. 2. 掌握Android U…

云终端处理器——Atom

由于上周展会的缘故&#xff0c;开始对云终端【I】处理器产生兴趣&#xff0c;接下来在“物理层”【II】来理解下X86-Atom&#xff0c;ARM&#xff0c;MIPS三种处理器&#xff0c;这是第一篇&#xff0c;主Atom Intel公司的官网简单介绍了一句 “英特尔 凌动【III】 处理器&am…

Java培训的学费标准是多少

​ 很多想要进入到互联网行业的小伙伴都会选择java这门编程语言&#xff0c;java编程语言技术在互联网公司是起着非常重要的作用的&#xff0c;那么如今市面上的java培训机构有很多&#xff0c;选择报Java培训的学费标准是多少呢?来看看下面的详细介绍。 ​  Java培训的学费…

Numpy入门教程:08. 集合操作

背景 什么是 NumPy 呢&#xff1f; NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库&#xff0c;可以帮助程序员轻松地进行数值计算&#xff0c;通常应用于以下场景&#xff1a; 执行各种数学任务&#xff0c;如&#xff1a;数值积分、微分、…

iPhone开发技巧之工具篇(4)--- 使用afconvert转换WAV文件

转载自&#xff1a;http://www.yifeiyang.net/iphone-development-skills-of-tool-papers-4-wav-file-conversion-using-afconvert/ 程序中经常使用 .WAV 的音效文件&#xff0c;虽然可以直接使用它&#xff0c;但是最好转换为 apple 推荐的 .CAF 格式。 这个时候我们就可以使用…

SQLite与pandas

以下链接对SQLite使用方法总结的很棒&#xff1a; http://www.cnblogs.com/yuxc/archive/2011/08/18/2143606.html 有关利用pandas读写QSLite的内容&#xff0c;可参考以下链接&#xff1a; http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html http:…

零基础学习java,这些书一定要看!

学习java技术除了看视频&#xff0c;看书也是非常重要的&#xff0c;尤其是零基础同学&#xff0c;本文包含学习Java各个阶段的书籍推荐&#xff0c;史上最全&#xff0c;学习Java&#xff0c;没有书籍怎么行&#xff0c;就好比出征没带兵器一个道理&#xff0c;这些书籍整理出…