XAML的全称是Extensible Application Markup Language,就是我们所说的可扩展应用程序标记语言。XAML可以应用到许多不同领域,但主要用于构建用户界面。

XAML是一种单纯的声明型语言,也就是说,它只能用于声明一些UI元素、绘制UI和动画等;不能在其中加入程序逻辑,从根本上实现了UI和逻辑代码分离。

XAML是一种由XML派生而来的语言,所以很多XML种的概念在XAML是通用的。

我们通过Visual Studio创建一个WPF应用程序,来介绍一下XAML的命名空间以及一些基本要素:(至于怎么通过Visual Studio创建WPF Application这里就不做介绍了)

下面我们来剖析一段最简单的XAML代码:

<Window x:Class="WPFDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Width="400" Height="350">
<Grid Name="Grid1">
<Grid Name="Grid2"/><!--空标签-->
</Grid>
</Window>

这段XAML代码包含3个元素:一个顶层的Window元素,2个Grid元素。在XAML文档中,所有元素都映射为一个.NET类的对象。

Name 被称为“Attribute”,通常在类中有一个Name的 “Property”与之对应。Attribute是属于编程语言文法层面的东西;Property属于面向对象的范畴。所以这2个Name的不同叫法一定不要混淆了。

跟XML语法一样,可以相互嵌套元素。这段代码中就是一个Window元素嵌套了一个Grid元素Grid1(或者说Grid元素是Window元素的内容),然后Grid1又嵌套了一个Grid元素。在XAML中只能有一个顶级元素。尽管可以使用任何顶级元素,但是WPF应用程序中只能使用如下3种顶级元素:

  · Window元素

  · Page元素(用于可导航的应用程序)

  · Application元素(定义应用程序资源和启动设置)

接下来看一下他的命名空间:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

这跟我们平时.NET中使用的命名空间不一样。而是看上去像一个网页地址名称,但是把他们copy到浏览器地址栏里也不会打开网页。这里是因为XML命名空间通常用URI。并且不同组织就不会使用相同的命名空间创建不同的基于XML的语言。这里schemas.microsoft.com就可以看出,由Microsoft所有。还有就是这个URI是XAML解析器的一个硬性编码,只要看到这些固定的字符串,就会把一系列的Assembly和其中的.NET命名空间引用进来。

第一个命名空间是WPF的核心名称空间,它包含了所有的WPF类,绘制UI相关,是表示(Presentation)层上面的东西。可以看到它并不包含前缀,所以除非特别指明,所有元素都位于该命名空间下。

第二个带有x前缀的命名空间,对应XAML语言解析处理相关的程序集,是语言层面 上的东西。后面有章节专门讲解x命名空间。

最后还剩下一个x:Class="WPFDemo.MainWindow" 没有介绍了,接下来我们来看看这个Attribute是什么:

x前缀说明,来自于x映射的命名空间。

namespace WPFDemo
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
/// <summary>
///
/// </summary>
public MainWindow()
{
InitializeComponent();
}
}
}

这个文件只包含一个简单的InitializeComponent()方法,而这个方法是在源代码中不可见的,因为他是编译自动生成的。我们可以在项目的obj\Debug\文件夹下找到一个名字与之对应的MainWindow.g.cs 文件,我们打开看就可以发现该方法的实现。

下面让我们来做个实验,来解释一下x:Class这个Attribute与他对应的MainWindow.cs文件的关系:

1.首先删除掉x:Class="WPFDemo.MainWindow"这个Attribute

2.同时也注释掉InitializeComponent(),保证项目能正常编译通过

3.直接F5发现项目还是能正常运行。这是因为App.xaml中StartupUri这个Attribute指定了这个MainWindow.xaml文件。只使用XAML文件同样能被编译器解析。后面的章节我们会讲到。

4.然后只恢复x:Class="WPFDemo.MainWindow"这个Attribute,然后把他改为x:Class="WPFDemo.MainWindow1",编译之后,项目还是能正常运行。

然后我们调用ildasm命令查看该项目生成的程序集:

会发现有个WPFDemo.MainWindow1的类,正好和我们刚才x:Class="WPFDemo.MainWindow1"的Attribute设置的值一致。由此,我们可以看出,x:Class这个Attribute的作用就是当XAML解析器将该特性解析成C#后的类名。

通过一个简单的WPF应用程序我们整体上了解了下XAML,接下来的章节我们将系统的了解一下XAML的语法,当然还包括讲解x命名空间,还有就是加载和编译XAML。

XAML 概述一的更多相关文章

  1. XAML 概述

    我们将向 Windows 运行时应用开发人员介绍 XAML 语言和 XAML 概念,并介绍在使用 XAML 创建 Windows 运行时应用时,在 XAML 中声明对象和设置属性的不同方式. 什么是 ...

  2. XAML 概述四

    这一节我们来简单介绍一下XAML的加载和编译,它包括如下三种方式:  · 只使用代码  · 使用代码和未编译的XAML  · 使用代码和编译过的BAML 一. 只使用代码 我们首先创建一个简单的控制台 ...

  3. XAML 概述三

    通过对前面2节对XAML的介绍,我们对XAML有了一定的认识.这一节我们来简单了解一下部分XAML命名空间(x:)语言功能. x命名空间映射的是http://schemas.microsoft.com ...

  4. XAML 概述二

    通过上一节我们已经对XAML有了一定的了解,这一节我们来系统的学习一下XAML. 一. 简单属性与类型转换器,属性元素: 我们已经知道 XAML是一种声明性的语言,并且XAML解析器会为每个标签创建一 ...

  5. WPF:XAML概述

    简介 XAML是eXtensible Application Markup Language可扩展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的描述性语言.XAML提供了一种便于 ...

  6. .Net Core WPF之XAML概述

    原文链接,机器翻译,有误处参看原文. XAML overview in WPF 2019/08/08 What is XAML XAML syntax in brief Case and white ...

  7. WPF从入门到放弃系列第二章 XAML

    本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳. 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn ...

  8. ResourceDictionary 和 XAML 资源引用

    XAML 定义应用的 UI,并且 XAML 也可以定义 XAML 中的资源.资源通常是对你希望多次使用的某些对象的定义.你要为 XAML 资源定义一个键,以供将来引用,该键的作用类似于资源的名称.你可 ...

  9. 基本 XAML 语法指南

    我们介绍了 XAML 语法规则,以及用于描述 XAML 语法中存在的限制或选项的术语.当出现以下情况时你会发现本主题很有用:不熟悉 XAML 语言的使用,希望加强对术语或某些语法部分的理解,或者对 X ...

随机推荐

  1. iOS 中的XML解析代码(SAX)

    1.XML解析(SAX) NSXMLParser SAX 大文件 1)打开文档 - (void)parserDidStartDocument:(NSXMLParser *)parser 2)开始查找起 ...

  2. 使用Spring Security实现权限管理

    使用Spring Security实现权限管理 1.技术目标 了解并创建Security框架所需数据表 为项目添加Spring Security框架 掌握Security框架配置 应用Security ...

  3. [书目20131223]Android、iPhone、Windows Phone手机网页及网站设计:最佳实践与设计精粹 - 张亚飞

    目录 第I篇 手机版专用网站设计和开发入门篇 第1章 准备创作环境和测试环境 3 1.1 使用Mobile Safari测试网页 4 1.1.1 iOS Simulator安装 5 1.1.2 使用M ...

  4. CF 118E Bertown roads 桥

    118E Bertown roads 题目:把无向图指定边的方向,使得原图变成有向图,问能否任意两点之间互达 分析:显然如果没有桥的话,存在满足题意的方案.输出答案时任意从一个点出发遍历一遍即可. 求 ...

  5. revel + swagger 文档也能互动啦

    beego 从 1.3 后开始支持自动化API文档,不过,目测比较复杂,一直期望 revel 能有官方支持. revel 确实已经有了官方支持的计划,有可能将在 0.14 版本支持,现在才 0.11. ...

  6. 数据库自定义表值函数Split(@LongStr, @SplitStr, @IsDistinct )

    CREATE FUNCTION [dbo].[F3_Split](@LongStr VARCHAR(MAX),@SplitStr VARCHAR(100),@IsDistinct BIT)RETURN ...

  7. SqlServer知识总结

    SqlServer查询表的列数 select count(*) from sysobjects a join syscolumns b on a.id=b.id where a.name='表名' 在 ...

  8. SharpMap V1.1 For Web教程系列之——前言

    上次使用SharpMap还是在0.9版本阶段,那个时候主要是为了将SharpMap移植到Windows Mobile环境中,具体可参见原先的文章.互联网真的是风云变幻啊,才短短几年,Windows M ...

  9. UI2_视图切换ViewController

    // // SubViewController.h // UI2_视图切换 // // Created by zhangxueming on 15/7/3. // Copyright (c) 2015 ...

  10. eclipse安装tomcate插件步骤

    今天在网上看了很多关于eclipse需要安装tomcat的文章,小编也没有指责的意思,只是想说为什么有那么多雷同且不正确的搭建过程,真是ctrl+c, ctrl+v玩多了吧,不知道流程有的是错误的,不 ...