Xamarin.Forms 中的 XAML 命名空间
XAML 使用 xmlns XML 属性进行命名空间声明。 本文介绍了 XAML 命名空间语法,并演示了如何声明 XAML 命名空间来访问一个类型。
概述
XAML 文件的根元素中始终有两个 XAML 命名空间声明。 第一个声明定义默认命名空间,如以下 XAML 代码示例所示:
xmlns="http://xamarin.com/schemas/2014/forms"
默认命名空间指定 XAML 文件中定义的无前缀的元素引用 Xamarin.Forms 类,例如 ContentPage
。
第二个命名空间声明使用 x
前缀,如以下 XAML 代码示例所示:
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
XAML 使用前缀声明非默认命名空间,并在引用命名空间中的类型时使用前缀。 x
命名空间声明指定 XAML 中定义的具有 x
前缀的元素用于 XAML(具体为 2009 XAML 规范)固有的元素和属性。
下表概述了 Xamarin.Forms 支持的 x
命名空间属性
构造 | 描述 |
---|---|
x:Arguments |
指定非默认构造函数或工厂方法对象声明的构造函数参数。 |
x:Class |
指定 XAML 中定义的类的命名空间和类名。 类名必须与代码隐藏文件的类名匹配。 请注意,此构造只能出现在 XAML 文件的根元素中。 |
x:DataType |
指定 XAML 元素及其子元素将绑定到的对象的类型。 |
x:FactoryMethod |
指定可用于初始化对象的工厂方法。 |
x:FieldModifier |
指定命名 XAML 元素的生成字段的访问级别。 |
x:Key |
为 ResourceDictionary 中的每个资源指定一个唯一的用户定义密钥。 密钥的值用于检索 XAML 资源,通常用作 StaticResource 标记扩展的参数。 |
x:Name |
指定 XAML 元素的运行时对象名称。 设置 x:Name 类似于在代码中声明变量。 |
x:TypeArguments |
指定泛型类型构造函数的泛型类型参数。 |
有关 x:DataType
属性的详细信息,请参阅编译的绑定。 有关 x:FieldModifier
属性的详细信息,请参阅字段修饰符。 有关 x:Arguments
和 x:FactoryMethod
属性的详细信息,请参阅在 XAML 中传递参数。 有关 x:TypeArguments
属性的详细信息,请参阅包含 Xamarin.Forms 的 XAML 中的泛型。
注意
除了上面列出的命名空间属性之外,Xamarin.Forms 还包括可以通过 x
命名空间前缀使用的标记扩展。 有关详细信息,请参阅使用 XAML 标记扩展。
在 XAML 中,命名空间声明从父元素继承到子元素。 因此,在 XAML 文件的根元素中定义命名空间时,该文件中的所有元素都会继承命名空间声明。
声明类型的命名空间
可以通过使用前缀声明 XAML 命名空间,在 XAML 中引用类型,命名空间声明指定公共语言运行时 (CLR) 命名空间名称以及可选的程序集名称。 这通过在命名空间声明中定义以下关键字的值来实现:
- clr-namespace: 或 using: – 在程序集中声明的 CLR 命名空间,此程序集包含要作为 XAML 元素公开的类型。 此关键字是必需的。
- assembly= – 包含所引用的 CLR 命名空间的程序集。 该值是程序集的名称,不带文件扩展名。 在包含 XAML 文件的项目文件中,应当将程序集路径设定为一个将引用该程序集的引用。 如果 clr-namespace 值与引用这些类型的应用程序代码位于同一程序集内,则可省略此关键字。
请注意,分隔 clr-namespace
或 using
标记和其值的字符是冒号,而分隔 assembly
标记和其值的字符为等号。 这两个标记之间应使用的字符是分号。
以下代码示例演示 XAML 命名空间声明:
<ContentPage ... xmlns:local="clr-namespace:HelloWorld" ...>
...
</ContentPage>
或者,也可以编写为:
<ContentPage ... xmlns:local="using:HelloWorld" ...>
...
</ContentPage>
local
前缀是一种约定,用于指示命名空间中的类型是应用程序的局部类型。 或者,如果类型位于另一个程序集中,则还应当在命名空间声明中定义程序集名称,如以下 XAML 代码示例所示:
<ContentPage ... xmlns:behaviors="clr-namespace:Behaviors;assembly=BehaviorsLibrary" ...>
...
</ContentPage>
然后,在从导入的命名空间声明类型的实例时指定命名空间前缀,如以下 XAML 代码示例所示:
<ListView ...>
<ListView.Behaviors>
<behaviors:EventToCommandBehavior EventName="ItemSelected" ... />
</ListView.Behaviors>
</ListView>
有关定义自定义命名空间架构的信息,请参阅 XAML 自定义命名空间架构。
总结
本文介绍了 XAML 命名空间语法,并演示了如何声明 XAML 命名空间来访问一个类型。 XAML 使用 xmlns
XML 属性进行命名空间声明,并且可以通过声明具有前缀的 XAML 命名空间在 XAML 中引用类型。