我注意到在XAML的开头,我们有类似以下的内容:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
我唯一看到xmlns的用途是从我的程序集中导入命名空间。这些也是导入程序集的实例吗?从URL导入吗?如果不是,它们又指什么?如果计算机没有连接到互联网会出现什么情况?
这与XAML无关,而是与XML一般相关。
命名空间的目标是能够唯一地标识XML对象。
在这里可以看看这里。
例如,它允许有两个具有不同命名空间的“Customer”节点。程序可以区分它是来自系统A还是系统B的客户节点。
这可以与C#命名空间进行比较。 "Control"类存在于System.Windows和System.Windows.Forms甚至是System.Web.Ui...相同的名称,但根据命名空间,拥有者是不同的。
需要知道的一件事情是,这只是一个声明。命名空间是自由文本,http://格式只是一个约定,并且不会发生目标URI的下载。
第一个声明将整个 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 词汇表映射为默认值。
http://schemas.microsoft.com/winfx/2006/xaml
是与 XAML 解析器相关的(因为 XAML 不仅仅是 XML,而且是一种声明性语言),而http://schemas.microsoft.com/winfx/2006/xaml/presentation
可能在 WPF 库的某个地方硬编码了。但这只是一个猜测。 - Steve B