本文演示了如何使用XAML属性来将参数传递给非默认构造函数,调用工厂方法以及指定泛型参数的类型。
概观
通常需要使用需要参数的构造函数实例化对象,或者调用静态创建方法。 这可以通过使用x:Argument和x:FactoryMethod属性在XAML中实现:
- x:Argument属性用于指定非默认构造函数或工厂方法对象声明的构造函数参数。 有关更多信息,请参阅传递构造函数参数。
- x:FactoryMethod属性用于指定可用于初始化对象的工厂方法。 有关更多信息,请参阅调用工厂方法。
另外,x:TypeArguments属性可以用来为泛型类型的构造函数指定泛型类型参数。 有关更多信息,请参阅指定通用类型参数。
传递构造函数参数
可以使用x:Argument属性将参数传递给非默认构造函数。 每个构造函数参数都必须在表示参数类型的XML元素中分隔。 Xamarin.Forms支持以下基本类型的元素:
- x:Object
- x:Boolean
- x:Byte
- x:Int16
- x:Int32
- x:Int64
- x:Single
- x:Double
- x:Decimal
- x:Char
- x:String
- x:TimeSpan
- x:Array
- x:DateTime
下面的代码示例演示如何在三个Color构造函数中使用x:Arguments属性:
点击(此处)折叠或打开
-
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
-
<BoxView.Color>
-
<Color>
-
<x:Arguments>
-
<x:Double>0.9</x:Double>
-
</x:Arguments>
-
</Color>
-
</BoxView.Color>
-
</BoxView>
-
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
-
<BoxView.Color>
-
<Color>
-
<x:Arguments>
-
<x:Double>0.25</x:Double>
-
<x:Double>0.5</x:Double>
-
<x:Double>0.75</x:Double>
-
</x:Arguments>
-
</Color>
-
</BoxView.Color>
-
</BoxView>
-
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
-
<BoxView.Color>
-
<Color>
-
<x:Arguments>
-
<x:Double>0.8</x:Double>
-
<x:Double>0.5</x:Double>
-
<x:Double>0.2</x:Double>
-
<x:Double>0.5</x:Double>
-
</x:Arguments>
-
</Color>
-
</BoxView.Color>
- </BoxView>
以下屏幕截图显示了使用指定参数值调用每个Color构造函数的结果:
调用工厂方法
可以在XAML中通过使用x:FactoryMethod属性及其参数使用x:Arguments属性指定方法的名称来调用工厂方法。 工厂方法是一种公共静态方法,它返回与定义方法的类或结构相同类型的对象或值。
Color结构定义了许多工厂方法,下面的代码示例演示了如何调用其中的三个方法:
点击(此处)折叠或打开
-
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
-
<BoxView.Color>
-
<Color x:FactoryMethod="FromRgba">
-
<x:Arguments>
-
<x:Int32>192</x:Int32>
-
<x:Int32>75</x:Int32>
-
<x:Int32>150</x:Int32>
-
<x:Int32>128</x:Int32>
-
</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>
以下屏幕截图显示了使用指定的参数值调用每个Color工厂方法的结果:
指定泛型类型参数
泛型类型的构造函数的泛型类型参数可以使用x:TypeArguments属性指定,如以下代码示例所示:
点击(此处)折叠或打开
-
<ContentPage ...>
-
<StackLayout>
-
<StackLayout.Margin>
-
<OnPlatform x:TypeArguments="Thickness">
-
<On Platform="iOS" Value="0,20,0,0" />
-
<On Platform="Android" Value="5, 10" />
-
<On Platform="WinPhone, Windows" Value="10" />
-
</OnPlatform>
-
</StackLayout.Margin>
-
</StackLayout>
- </ContentPage>
概要
本文演示了使用XAML属性,可用于将参数传递给非默认构造函数,调用工厂方法以及指定泛型参数的类型。