XAML概要--XAML的根元素和命名空间
一个XAML文件必须只有一个根元素,这样才是格式正确的XML文件并且是有效的XAML文件。通常我们选择应用程序模块部分来做为根元素,如选择Window或Page作为页面的根元素、选择ResourceDictionary做为外部资源的根元素、选择Application做为应用程序的根元素等。下面的例子是一个典型的WPF页面的根元素的命名,它使用Page做为根元素。
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
...
</Page>
上例中的根元素中包含两个属性:xmlns和xmlns:x。这两个属性给XAML处理器指明了标签中引用的元素是在哪个XML命名空间中定义的。特别是xmlns属性,它指明了默认的XML命名空间,在默认的XML命名空间中,对象元素可以不使用前缀来指定,对于大多数的WPF应用案例,以及在SDK的WPF段所给出的所有的例子中,默认的XML命名空间都被映射到WPF的命名空间:http://schemas.microsoft.com/winfx/2006/xaml/presentation。xmlns:x指明了另外的一个XML的命名空间,它对应的是XAML语言命名空间:http://schemas.microsoft.com/winfx/2006/xaml,在引用这个命名空间的文件中定义的标记时,安装XAML规范定义的语言组件必须使用x:做为前缀,xmlns的这种定义使用和映射范围的做法是符合XML1.0规范的。需要注意的是:xmlns属性只需要在每个页面的根元素中以及定义了这个属性的标记中使用,这同样也是符合XML1.0规范的。xmlns也允许在根元素以下的元素中定义,并且应用到这个元素以下的所有子元素,但是这种用法不常用,因为这样频繁的定义会导致XAML的样式很难阅读。
因为配置会做为编译文件的一部分,所以WPF程序集会知道支持WPF对应的默认的XML命名空间中所包含的类型。程序集也要被映射到目标文件中,因此为了引用来自WPF程序集中的XAML元素,映射xmlns是必须的。对于自定义程序集或者WPF以外的程序集,也能把这样的程序集做为xmlns映射的一部分,通常的做法是选择一个不同的前缀,但是也可以使用不用XML命名空间做为默认的命名空间,然后给WPF的命名空间指定一个前缀。