WPF xaml文件开头的xmlns=[某个url]属性是用来做什么的?

3

我注意到在XAML的开头,我们有类似以下的内容:

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

我唯一看到xmlns的用途是从我的程序集中导入命名空间。这些也是导入程序集的实例吗?从URL导入吗?如果不是,它们又指什么?如果计算机没有连接到互联网会出现什么情况?
2个回答

2

这与XAML无关,而是与XML一般相关。

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

在这里可以看看这里

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

这可以与C#命名空间进行比较。 "Control"类存在于System.Windows和System.Windows.Forms甚至是System.Web.Ui...相同的名称,但根据命名空间,拥有者是不同的。

需要知道的一件事情是,这只是一个声明。命名空间是自由文本,http://格式只是一个约定,并且不会发生目标URI的下载。


我的问题是关于URL的存在,而不是xmlns本身。如果这些URL只是约定俗成的,那么http://schemas.microsoft.com/winfx/2006/xaml和http://schemas.microsoft.com/winfx/2006/xaml/presentation指的是什么? - Louis Rhys
我猜 http://schemas.microsoft.com/winfx/2006/xaml 是与 XAML 解析器相关的(因为 XAML 不仅仅是 XML,而且是一种声明性语言),而 http://schemas.microsoft.com/winfx/2006/xaml/presentation 可能在 WPF 库的某个地方硬编码了。但这只是一个猜测。 - Steve B
@Louis: 我们将类放入不同的命名空间的原因正是如此。在 XML 中,URI 是它们的名称方式。即使它看起来像一个 URL,它并不一定要指向一个现有的位置。它只是一个名称。 - Jeff Mercado

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 词汇表映射为默认值。
项目模板、示例代码以及此 SDK 中语言功能的文档都遵循了用于映射 XAML 语言内在函数支持的 x: 前缀约定。XAML 命名空间定义了许多常用功能,即使对于基本的 WPF 应用程序也是必需的。例如,为了通过部分类将任何代码后台连接到 XAML 文件,您必须将该类命名为相关 XAML 文件的根元素中的 x:Class 属性。或者,您希望将其作为键控资源访问的任何元素都应在相关元素上设置 x:Key 属性。

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


我认为为了读者的利益,最好写下或引用你认为回答问题的内容,而不是只给出链接让读者自己寻找答案。特别是当链接并不简洁明了时。 - Louis Rhys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接