通常需要使用需要参数的构造函数或调用静态创建方法来实例化对象。 这可以通过使用 x:Arguments 和 x:FactoryMethod 属性在 .NET Multi-platform App UI (.NET MAUI) XAML 中实现:
x:Arguments属性用于指定非默认构造函数或工厂方法对象声明的构造函数参数。 有关详细信息,请参阅传递构造函数参数。x:FactoryMethod属性用于指定可用于初始化对象的工厂方法。 有关详细信息,请参阅调用工厂方法。
此外,x:TypeArguments 属性还可用于指定泛型类型的构造函数的泛型类型参数。 有关详细信息,请参阅指定泛型类型参数。
可以使用以下 .NET MAUI XAML 语言基元将参数传递给构造函数和工厂方法:
x:Array(对应于Array)。x:Boolean(对应于Boolean)。x:Byte(对应于Byte)。x:Char(对应于Char)。x:DateTime(对应于DateTime)。x:Decimal(对应于Decimal)。x:Double(对应于Double)。x:Int16(对应于Int16)。x:Int32(对应于Int32)。x:Int64(对应于Int64)。x:Object(对应于Object)。x:Single(对应于Single)。x:String(对应于String)。x:TimeSpan(对应于TimeSpan)。
除了 x:DateTime,其他语言基元都符合 XAML 2009 规范。
注意
x:Single 语言基元可用于传递 float 参数。
传递构造函数参数
可以使用 x:Arguments 属性将参数传递给非默认构造函数。 每个构造函数参数必须在表示参数类型的 XML 元素中分隔。
以下示例演示如何将 x:Arguments 属性与三个不同的 Color 构造函数一起使用:
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Single>0.9</x:Single>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Single>0.25</x:Single>
<x:Single>0.5</x:Single>
<x:Single>0.75</x:Single>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Single>0.8</x:Single>
<x:Single>0.5</x:Single>
<x:Single>0.2</x:Single>
<x:Single>0.5</x:Single>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
x:Arguments 标记中的元素数以及这些元素的类型必须与其中一个 Color 构造函数匹配。 具有单个参数的 Color 构造函数需要从 0(黑色)到 1(白色)的灰度 float 值。 具有三个参数的 Color 构造函数需要范围为 0 到 1 的红色、绿色和蓝色 float 值。 具有四个参数的 Color 构造函数将 float alpha 通道添加为第四个参数。
调用工厂方法
通过使用 x:FactoryMethod 属性指定方法名称并使用 x:Arguments 属性指定其参数,可以在 .NET MAUI XAML 中调用工厂方法。 工厂方法是一种 public static 方法,可返回与定义方法的类或结构相同的类型的对象或值。
Color 类定义了一些工厂方法,以下示例演示如何调用其中三种方法:
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromRgba">
<x:Arguments>
<x:Byte>192</x:Byte>
<x:Byte>75</x:Byte>
<x:Byte>150</x:Byte>
<x:Byte>128</x:Byte>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromHsla">
<x:Arguments>
<x:Double>0.23</x:Double>
<x:Double>0.42</x:Double>
<x:Double>0.69</x:Double>
<x:Double>0.7</x:Double>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromHex">
<x:Arguments>
<x:String>#FF048B9A</x:String>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
x:Arguments 标记中的元素数量以及这些元素的类型必须与所调用的工厂方法的参数相匹配。 FromRgba 工厂方法需要四个 byte 参数,分别表示红色、绿色、蓝色和 alpha 值,范围为 0 到 255。 FromHsla 工厂方法需要四个 float 参数,分别表示色调、饱和度、亮度和 alpha 值,范围为 0 到 1。 FromHex 工厂方法需要一个 string 参数,用于表示十六进制 (A)RGB 颜色。
指定泛型类型参数
可以使用 x:TypeArguments 属性指定泛型类型的构造函数的泛型类型参数,如以下示例所示:
<StackLayout>
<StackLayout.Margin>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0,20,0,0" />
<On Platform="Android" Value="5, 10" />
</OnPlatform>
</StackLayout.Margin>
</StackLayout>
OnPlatform 类是泛型类,必须使用与目标类型匹配的 x:TypeArguments 属性进行实例化。 在 On 类中,Platform 属性可以接受单个 string 值或多个逗号分隔的 string 值。 在此示例中,StackLayout.Margin 属性设置为特定于平台的 Thickness。
有关泛型类型参数的详细信息,请参阅 XAML 中的泛型。