您的位置:首页 > 其它

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

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

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

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

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

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

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

命名空间下被声明的呢?

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

<Page

x:Class="App1.MainPage"

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

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

xmlns:local="using:App1"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

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="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

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

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

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

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

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

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

至于

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

代表的含义也就可以解释了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐