剖析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开始被引入的 ...
随机推荐
- MySQL在线DDL工具 gh-ost
一.简介 gh-ost基于 golang 语言,是 github 开源的一个 DDL 工具,是 GitHub's Online Schema Transmogrifier/Transfigurator ...
- PTA 找出不是两个数组共有的元素
7-2 找出不是两个数组共有的元素 (20 分) 给定两个整型数组,本题要求找出不是两者共有的元素. 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤),随后是N个整数,其间以 ...
- [系统重装日志2]win10系统安装pytorch0.4.1(gpu版本)
目录 0,资源整理 1,安装最新版的显卡驱动 2,安装visual studio 3,安装cuda 4,安装cudnn,配置环境变量 5,安装pytorch 6,安装torchvision 7,验证 ...
- 自动获取IMC系统所有网络设备资产信息
1 #coding=utf8 2 3 """ 4 CMDB接口调用 5 """ 6 import csv 7 import json 8 i ...
- python中数组切片[:,i] [i:j:k] [:-i] [i,j,:k]
逗号","分隔各个维度,":"表示各个维度内的切片,只有:表示取这个维度的全部值,举例说明如下 1 1.二维数组 2 3 X[:,0]取所有行的第0个数据,第二 ...
- Python 网络编程 C/S建立Socket连接
分为客户端和服务端 服务端 server.py 客户端 1 #coding=utf-8 2 import socket 3 4 client = socket.socket() #生成socket连接 ...
- python 开发环境安装(最全最完整)
一.下载安装包 Windows64 位电脑安装 Python,浏览器的地址栏访问: https://www.python.org/ftp/python/3.7.9/python-3.7.9-amd64 ...
- 010_Nginx入门
目录 使用场景 什么是Nginx 正向代理与反向代理 正向代理:代理客户端 反向代理:代理服务端 Nginx的作用 反向代理 负载均衡 轮询 加权轮询 IP hash 动静分离 Windows下安装 ...
- Leedcode算法专题训练(链表)
1.发现两个链表的交点 160.两个链表的交集(容易) Leetcode /力扣 public class Solution { public ListNode getIntersectionNode ...
- JavaWeb 基础知识补充
软件架构 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端程序,在远程有一个服务器端程序 * 如:QQ,迅雷... ...