剖析XAML语言
这节剖析一下XAML(读作:zaml)——这一WPF中的UI设计语言。
XAML
在wpf中,UI部分使用xaml语言来编写,xaml语言是由xml语言派生而来的语言,所以在xaml中我们可以看到很多熟悉的特点:它也是使用标签构建页面,一个标签就对应一个对象,标签与标签之间或为并列关系,或为包含关系。

标签分为非空标签和空标签,非空标签是指标签中可以包含子标签,空标签则不能包含任何子标签,它们的样子如下:
非空标签:<tag>[<childtag...>]</tag>
空标签:<tag/>
每一个标签都有其特性,比如我们可以为window标签设置title,width特性,为Grid标签设置Background特性等等,也可以为标签事件设置事件处理器(标签事件被触发时要执行的方法),详情如下图:

我为window标签设置了title为“XAML语言”,及其宽高,还为其设置了Loaded事件(当window被加载的时候触发)的事件处理器。
xmlns
在C#中有命名空间的概念,我们可以使用using引入,就可以使用其中的类,在xaml中,也同样有命名空间,在window标签中用xmlns声明的这几行,这就是本页面引入的命名空间。

一般的情况下,我们引入命名空间,都是为了使用其中的控件,或者使用一些类型转换器(TypeConverter,后续章节会讲)等工具类,所以为了区分我们使用的是哪个命名空间下的控件或类,我们必须要在引入命名空间的同时,指定它在本页面的别名,也就是xmlns冒号后的值,如上图中的“x”,“d”,"mc"等,我们使用的时候也要在标签前加上名字:<x:tag/>。
另外,我们看到上图中引入的命名空间是一个个http链接,但这并不是去访问了某个地址,而是xaml中的硬编码,当系统遇到这样的链接,就会去引用一堆命名空间,用一行引用代替了多行引用。再一个,一个页面可以有一个默认命名空间,也就是xmlns后没有别名,当我们使用的控件没有标明使用哪个命名空间时,系统会自动去默认命名空间中寻找,就像window,grid这样的控件,是由xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"都在这一行引入的命名空间中。
我们新建一个界面,命名空间默认就是以上这样的几行,但其实它引入了很多,单单http://schemas.microsoft.com/winfx/2006/xaml/presentation这一个声明就会引入如下一堆命名空间:

所以我们基本上不需要考虑引入哪些基本命名空间,微软已经帮我们做好了 。
编译
当我们运行时,系统会编译xaml代码,会将xaml编译为一个partial 类,类名就是window 标签第一行用x:Class指定的名称,也就是会跟我们的后台类合并,这一点还是跟WinForm一样的。
后台代码中的InitializeComponent()方法就是编译xaml后的部分类给的,作用是去初始化控件。

本节到此结束,我的公众号:DotNet 致知

剖析XAML语言的更多相关文章
- Xamarin XAML语言教程使用Xamarin Studio创建XAML(二)
Xamarin XAML语言教程使用Xamarin Studio创建XAML(二) 使用Xamarin Studio创建XAML Xamarin Studio和Visual Studio创建XAML文 ...
- Xamarin XAML语言教程模板视图TemplatedView(二)
Xamarin XAML语言教程模板视图TemplatedView(二) (2)打开MainPage.xaml文件,编写代码,将构建的控件模板应用于中TemplatedView.代码如下: <? ...
- Xamarin XAML语言教程模板视图TemplatedView(一)
Xamarin XAML语言教程模板视图TemplatedView(一) 模板视图TemplatedView 与模板页面相对的是TemplatedView,它被称为模板视图,它的功能和模板页面类似,也 ...
- Xamarin XAML语言教程模板页面TemplatedPage
Xamarin XAML语言教程模板页面TemplatedPage 模板页面TemplatedPage 在上文中我们提到了TemplatedPage,它被称为模板页面,用来显示控件模版.Templat ...
- Xamarin XAML语言教程控件模板的模板绑定
Xamarin XAML语言教程控件模板的模板绑定 控件模板的模板绑定 为了可以轻松更改控件模板中控件上的属性值,可以在控件模板中实现模板绑定功能.模板绑定允许控件模板中的控件将数据绑定到公共属性上. ...
- Xamarin XAML语言教程构建ControlTemplate控件模板 (四)
Xamarin XAML语言教程构建ControlTemplate控件模板 (四) 2.在页面级别中构建控件模板 如果开发者要在页面级别中构建控件模板,首先必须将ResourceDictionary添 ...
- Xamarin XAML语言教程构建ControlTemplate控件模板 (三)
Xamarin XAML语言教程构建ControlTemplate控件模板 (三) (3)打开MainPage.xaml.cs文件,编写代码,实现主题的切换功能.代码如下: using System; ...
- Xamarin XAML语言教程构建ControlTemplate控件模板 (二)
Xamarin XAML语言教程构建ControlTemplate控件模板 (二) (2)打开MainPage.xaml文件,编写代码,将构建的控件模板应用于ContentView中.代码如下: &l ...
- Xamarin XAML语言教程构建ControlTemplate控件模板
Xamarin XAML语言教程构建ControlTemplate控件模板 控件模板ControlTemplate ControlTemplate是从Xamarin.Forms 2.1.0开始被引入的 ...
随机推荐
- POJ_1273 Drainage Ditches 【网络流】
一.题面 Drainage Ditches 二.分析 网络流的裸题. 1 Edmonds-Karp算法 求解网络流其实就是一个不断找增广路,然后每次找到一条增广路后更新残余网络的一个过程. EK算法主 ...
- ch1_6_2求解删除公共字符问题
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成&q ...
- MVC中"删除"按钮无法实现
出现原因:MVC视图中定义了空的模板页 解决办法:删除模板页 或 改成定义页面标题都可以
- Pytorch数据读取与预处理实现与探索
在炼丹时,数据的读取与预处理是关键一步.不同的模型所需要的数据以及预处理方式各不相同,如果每个轮子都我们自己写的话,是很浪费时间和精力的.Pytorch帮我们实现了方便的数据读取与预处理方法,下面记录 ...
- 配置docker的pdflatex环境
技术背景 Latex在文档撰写方面是不可或缺的工具,尤其是在写文章方面,是必须要用到的文字排版工具.但是latex的环境部署并不是一个特别人性化的操作,尤其是在各种不同的平台上操作是完全不一样的,还经 ...
- 服务器安装部署-01-MySQL
1 MySQL 1.1 安装 在root用户权限下 # 创建mysql用户和用户组,同时禁止登陆 shell> groupadd mysql shell> useradd -r -g my ...
- 前端 | JS 任务和微任务:promise 的回调和 setTimeout 的回调到底谁先执行?
首先提一个小问题:运行下面这段 JS 代码后控制台的输出是什么? console.log("script start"); setTimeout(function () { con ...
- 全网最详细的Linux命令系列-cd命令
Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的. 所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧. 命令格 ...
- Hadoop学习笔记—Yarn
目录 一些基本知识 ResourceManager 的恢复 Resource Manager的HA YARN Node Labels YARN Node Attributes Web Applicat ...
- React 错误边界组件
这是React16的内容,并不是最新的技术,但是用很少被讨论,直到通过文档发现其实也是很有用的一部分内容,还是总结一下- React中的未捕获的 JS 错误会导致整个应用的崩溃,和整个组件树的卸载.从 ...