XAML 概述一

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类的对象。spa

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

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

  · Window元素对象

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

  · 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。

相关文章
相关标签/搜索