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"
代表的含义也就可以解释了。
头大了。所以本篇我就说说作为强迫症患者,对于.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"
代表的含义也就可以解释了。
相关文章推荐
- 20110327-8.1-fstream定义读写已命名文件的类型
- windows phone xaml文件中元素及属性(10)
- Windows Phone 7 开发探索笔记8——加载XAML文件中的对象
- Windows Phone Runtime 8.1 按返回键彻底关闭App -- 重新定义硬件返回键的事件
- windows phone xaml文件中元素及属性(10)
- 定义一个学生结构体类型struct student,里边含有学号,姓名,分数,定义结构体数组struct student s[3],给数组赋初值后, 写入文件,然后通过lseek偏移到开头,然后再读取
- 如何在xaml文件中操作用户在后台代码定义的类(1)
- windows phone xaml文件中元素及属性(10)
- WP8.1 Windows Phone 8.1开发:何如定义Pivot头部样式、定义Pivot头部颜色
- 如何在xaml文件中操作用户在后台代码定义的类(2)
- SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(2)--示例篇:创建一个登录控件(原创)(转载本文请注明出处)
- Windows Phone 8.1保留文件和 URI 关联
- SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(1)--说明篇(原创)(转载本文请注明出处)
- Windows Phone 7 开发探索笔记8——加载XAML文件中的对象
- Windows Phone 8.1中应用数据之应用文件
- windows phone xaml文件中元素及属性(10)[转]
- Windows Phone开发之独立存储、文件的读写、ListBox绑定数据、NavigationService实现XAML跳转
- windows phone 8.1开发:文件选择器FileOpenPicker
- windows phone xaml文件中元素及属性(10)
- windows phone 8.1开发:文件选择器FileSavePicker