2011-05-10 140 views
3

我在XAML,我们有东西开始注意到像WPF xaml文件开头的xmlns = [some url]属性是什么?

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

唯一的其他用法我看到的xmlns是从我的组件导入命名空间。这些也是进口装配的实例吗?从一个URL?如果不是,他们指的是什么?如果电脑没有连接到互联网怎么办?

回答

0

第一个声明映射整体WPF客户端/框架XAML命名空间作为默认:

的xmlns = “http://schemas.microsoft.com/winfx/2006/xaml/presentation”

的第二个声明映射一个单独的XAML名称空间,将其映射(通常)为x:前缀。

的xmlns:X =“http://schemas.microsoft.com/winfx/2006/xaml”

这些声明之间的关系是在x:前缀映射支持是XAML的一部分内在语言定义,WPF是一种使用XAML作为语言的实现,并为XAML定义了其对象的词汇表。由于WPF词汇的用法比XAML内在用法要普遍得多,所以WPF词汇表被映射为默认值。

用于映射XAML语言内部函数支持的x:前缀约定之后是项目模板,示例代码以及此SDK中语言功能的文档。 XAML命名空间定义了许多即使对于基本的WPF应用程序也是必需的常用功能。例如,要将任何代码隐藏通过分部类连接到XAML文件,必须将该类命名为相关XAML文件的根元素中的x:Class属性。或者,如在XAML页面中定义您要访问的键控资源的任何元素应该有X:主要属性有问题

http://msdn.microsoft.com/en-us/library/ms747086.aspx

+0

我认为,为了读者的利益,如果你写或引用一些你认为可以回答问题的东西,而不仅仅是给出链接并让读者找到答案,那么会更好。特别是当链接不完整时。 – 2011-05-10 08:04:29

2

这是不相关的XAML元素上设置的,但一般的XML。

命名空间的目标是能够唯一标识xml对象。

看一看here

例如,它允许有两个“客户”节点,具有不同的名称空间。程序可以区分它是来自系统A还是系统B的客户节点。

这也可以与C#命名空间进行比较。 “Control”类既存在于System.Windows也存在于System.Windows.Forms中,甚至在System.Web.Ui中也存在......同名,但“所有者”根据名称空间而不同。

有一点要知道,它只是一个声明。命名空间是一个自由文本,http://格式只是一个约定,不会发生目标uri的下载。

+0

我的问题是关于url的存在,而不是关于xmlns本身。如果url只是约定,那么http://schemas.microsoft.com/winfx/2006/xaml和http://schemas.microsoft.com/winfx/2006/xaml/presentation是指什么? – 2011-05-10 08:01:40

+0

我想'http://schemas.microsoft。com/winfx/2006/xaml'涉及到xaml解析器(因为xaml不仅是XML,而且是一种声明性语言),并且'http:// schemas.microsoft.com/winfx/2006/xaml/presentation'很可能硬编码在WPF库中的某处。但这只是猜测 – 2011-05-10 08:05:38

+0

@Louis:这和我们将类放入不同名称空间的原因完全相同。在XML中,URI是[如何命名](http://en.wikipedia.org/wiki/XML_namespace#Namespace_names)。即使它看起来像一个URL,它也不一定要引用现有的位置。这只是一个名字。 – 2011-05-10 08:29:06