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:Argumentsx: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-namespaceusing 标记和其值的字符是冒号,而分隔 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 中引用类型。