Windows Phone 8.1中的.xaml文件开头那些奇怪的定义

XAML的语法和规则,很大程度上和XML相似。对于语法这种东西,我感觉太大了,之前修的一门编译原理我已经很

头大了。所以本篇我就说说作为强迫症患者,对于.xaml文件那些开头的奇奇怪怪的定义是怎么一回事。

XAML里面的元素都是对应着.NET里面的类的,如在XAML中打出<Button>..</Button>,那么Button这个元素对应

着.NET里面的哪个类呢,换言之XAML解释器如何解读它是按钮而不是文本控件呢?

可以看出我们只提供类名是不够的,因为在不同的情况下,类名一样的情况会很多,这样就让XAML解析器很困惑,

到底用哪种类的声明去解释这个类呢?因为类都声明在某个命名空间之下,所以也可以这理解,这个类到底是在哪个

命名空间下被声明的呢?

所以就有如下的XAML文件开头的代码,,或者说声明:

<Page x:Class="App1.MainPage" xmlns="" xmlns:x="" xmlns:local="using:App1" xmlns:d="" xmlns:mc="" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

首先上述代码声明了若干个XML命名空间,XAML文档本身就是一个完整的XML文档。

而xmlns是XML的一个特殊特性,用来声明命名空间。一旦声明了一个命名空间,在文档中的任何地方都可以使用该

命名空间。像"using:App1"表示引用的是应用程序里面的App1空间,所以可以在XAML中通过local表示符来使用

App1控件下的控件或者其他类。

总结下来形式就为xmlns:命名空间别名="命名空间",然后下面的代码可以使用命名空间别名:类名来调用空间中的

类。

但是注意到Grid并没有一个空间引用的前缀,那么Grid元素被解析成哪个类呢?

可能是Windows.UI.Xaml.Controls.Grid类,也可能是第三方组件中的Grid类,或者是在应用程序中自己定义的Grid

类。为了弄明白,解析器会检查XML命名空间

xmlns=""

xmlns:x=""

前者是Windows Phone核心命名空间,包好了大部分用来构建用户界面的控件类。在代码中,该名称空间没有使用

命名空间前缀,所以它成为整个文档的默认命名空间,因此,代码中没有前缀的元素都自动位于该命名空间下。

后者是XAML命名空间,包含各种XAML使用特性,这些特性影响着文档的解释方式。该名称空间被映射为前缀x。这

就意味着通过在元素名称之前放置名称空间前缀x来使用该命名空间。

如下面代码中的x:Name,x:Key等等。

至于

xmlns:d=""

xmlns:mc=""

代表的含义也就可以解释了。

人只要不失去方向,就不会失去自己

Windows Phone 8.1中的.xaml文件开头那些奇怪的定义

相关文章:

你感兴趣的文章:

标签云: