003.XAML类结构

一.XAML 命名空间

XAML 使用 xmlns XML 特性进行命名空间声明。 XAML 文件的根元素中始终有两个 XAML 命名空间声明。 第一个定义默认命名空间

xmlns="http://schemas.microsoft.com/dotnet/2021/maui"

第二个命名空间声明使用 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指定泛型类型构造函数的泛型类型参数。

声明类型的命名空间(自定义类的路由)

可以通过使用前缀声明 XAML 命名空间,在 XAML 中引用类型,命名空间声明指定公共语言运行时 (CLR) 命名空间名称以及可选的程序集名称。 这通过在命名空间声明中定义以下关键字的值来实现:

  • clr-namespace: 或 using: - 在程序集中声明的 CLR 命名空间,此程序集包含要作为 XAML 元素公开的类型。 此关键字是必需的。
  • assembly= - 包含引用的 CLR 命名空间的程序集。 该值是程序集的名称,不带文件扩展名。 程序集的路径应在包含将引用程序集的 XAML 文件的项目中作为引用建立。 如果 clr-namespace 值与引用类型的应用代码位于同一程序集中,则可以省略此关键字。

以下代码示例演示 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>

二.类修饰符

.NET Multi-platform App UI (.NET MAUI) x:ClassModifier 属性指定程序集中生成的类的访问级别,前提是 x:Class 是在同一 XAML 元素上指定的。 此操作可将类型隐藏在库中,让使用者无法访问。

x:ClassModifier 属性的有效值如下:

  • Public - 指定生成的类没有访问限制。
  • Internal - 指定生成的类只能在同一程序集的类型中访问。
  • NotPublic - 等同于 Internal

x:ClassModifier 属性的值必须与其代码隐藏文件中类型的访问级别保持一致。

默认情况下,如果未设置属性的值,则生成的类为 public

以下 XAML 演示了设置该属性的示例:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyMauiApp.MainPage"
             x:ClassModifier="NotPublic">
    ...
</ContentPage>

三.字段修饰符

.NET Multi-platform App UI (.NET MAUI) x:FieldModifier 属性指定命名 XAML 元素的生成字段的访问级别。

x:FieldModifier 属性的有效值如下:

  • Private - 指定 XAML 元素的生成字段只能在声明该字段的类的正文中访问。
  • Public - 指定 XAML 元素的生成字段没有访问限制。
  • Protected - 指定 XAML 元素的生成字段可在其类中访问,也可由派生类实例访问。
  • Internal - 指定 XAML 元素的生成字段只能在同一程序集的类型中访问。
  • NotPublic - 等同于 Internal

默认情况下,如果未设置属性的值,则元素的生成字段为 private

要处理 x:FieldModifier 属性,必须满足以下条件:

  • 顶级 XAML 元素必须是有效的 x:Class
  • 当前 XAML 元素指定了 x:Name

以下 XAML 演示了设置该属性的示例:

<Label x:Name="privateLabel" />
<Label x:Name="internalLabel" x:FieldModifier="NotPublic" />
<Label x:Name="publicLabel" x:FieldModifier="Public" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值