XAML 命名空间
XAML 使用 xmlns
XML 特性进行命名空间声明。 XAML 文件的根元素中始终有两个 XAML 命名空间声明。 第一个定义默认命名空间:
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
默认命名空间指定 XAML 文件中定义的不带前缀的元素引用 .NET Multi-platform App UI (.NET MAUI) 类,例如 ContentPage、Label 和 Button。
第二个命名空间声明使用 x
前缀:
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
XAML 使用前缀声明非默认命名空间,并在引用命名空间中的类型时使用前缀。 x
命名空间声明指定在 XAML 中定义的带有 x
前缀的元素用于 XAML(特别是 2009 XAML 规范)固有的元素和属性。
下表概述了 .NET MAUI 支持的 x
构造:
构造 | 描述 |
---|---|
x:Arguments |
指定非默认构造函数或工厂方法对象声明的构造函数参数。 |
x:Class |
指定 XAML 中定义的类的命名空间和类名。 类名必须与代码隐藏文件的类名匹配。 请注意,此构造只能出现在 XAML 文件的根元素中。 |
x:ClassModifier |
指定程序集中生成的类的访问级别。 |
x:DataType |
指定 XAML 元素及其子元素将绑定到的对象的类型。 |
x:FactoryMethod |
指定可用于初始化对象的工厂方法。 |
x:FieldModifier |
指定命名 XAML 元素的生成字段的访问级别。 |
x:Key |
为 ResourceDictionary 中的每个资源指定一个唯一的用户定义密钥。 密钥的值用于检索 XAML 资源,通常用作 StaticResource 标记扩展的参数。 |
x:Name |
指定 XAML 元素的运行时对象名称。 设置 x:Name 类似于在代码中声明变量。 |
x:TypeArguments |
指定泛型类型构造函数的泛型类型参数。 |
有关 x:ClassModifier
属性的详细信息,请参阅类修饰符。 有关 x:DataType
属性的详细信息,请参阅编译的绑定。 有关 x:FieldModifier
属性的详细信息,请参阅字段修饰符。 有关 x:Arguments
和 x:FactoryMethod
属性的详细信息,请参阅传递参数。 有关 x:TypeArguments
属性的详细信息,请参阅泛型。
注意
除了上面列出的构造之外,.NET MAUI 还包括可通过 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:MyMauiApp">
...
</ContentPage>
或者,也可以编写为:
<ContentPage ... xmlns:local="using:MyMauiApp">
...
</ContentPage>
local
前缀是一种约定,用于表示命名空间中的类型是应用的本地类型。 或者,如果类型位于另外的程序集中,则还应在命名空间声明中定义程序集名称:
<ContentPage ... xmlns:controls="clr-namespace:Controls;assembly=MyControlLibrary" ...>
...
</ContentPage>
然后,从导入的命名空间声明类型的实例时指定命名空间前缀:
<controls:Expander IsExpanded="True">
...
</controls:Expander>
有关定义自定义命名空间架构的信息,请参阅自定义命名空间架构。