【Xamarin.Forms】在XAML中传递参数

简介: 本文演示了如何使用XAML属性来将参数传递给非默认构造函数,调用工厂方法以及指定泛型参数的类型。 概观 通常需要使用需要参数的构造函数实例化对象,或者调用静态创建方法。

本文演示了如何使用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属性:

点击(此处)折叠或打开

  1. BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
  2.   BoxView.Color>
  3.     Color>
  4.       x:Arguments>
  5.         x:Double>0.9/x:Double>
  6.       /x:Arguments>
  7.     /Color>
  8.   /BoxView.Color>
  9. /BoxView>
  10. BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
  11.   BoxView.Color>
  12.     Color>
  13.       x:Arguments>
  14.         x:Double>0.25/x:Double>
  15.         x:Double>0.5/x:Double>
  16.         x:Double>0.75/x:Double>
  17.       /x:Arguments>
  18.     /Color>
  19.   /BoxView.Color>
  20. /BoxView>
  21. BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
  22.   BoxView.Color>
  23.     Color>
  24.       x:Arguments>
  25.         x:Double>0.8/x:Double>
  26.         x:Double>0.5/x:Double>
  27.         x:Double>0.2/x:Double>
  28.         x:Double>0.5/x:Double>
  29.       /x:Arguments>
  30.     /Color>
  31.   /BoxView.Color>
  32. /BoxView>


x:Arguments标签中的元素数量以及这些元素的类型必须与Color构造函数之一相匹配。 具有单个参数的Color构造函数需要从0(黑色)到1(白色)的灰度值。 具有三个参数的Color构造函数需要从0到1范围内的红色,绿色和蓝色值。具有四个参数的Color构造函数将添加一个alpha通道作为第四个参数。
以下屏幕截图显示了使用指定参数值调用每个Color构造函数的结果:


调用工厂方法

可以在XAML中通过使用x:FactoryMethod属性及其参数使用x:Arguments属性指定方法的名称来调用工厂方法。 工厂方法是一种公共静态方法,它返回与定义方法的类或结构相同类型的对象或值。
Color结构定义了许多工厂方法,下面的代码示例演示了如何调用其中的三个方法:

点击(此处)折叠或打开

  1. BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
  2.   BoxView.Color>
  3.     Color x:FactoryMethod="FromRgba">
  4.       x:Arguments>
  5.         x:Int32>192/x:Int32>
  6.         x:Int32>75/x:Int32>
  7.         x:Int32>150/x:Int32>
  8.         x:Int32>128/x:Int32>
  9.       /x:Arguments>
  10.     /Color>
  11.   /BoxView.Color>
  12. /BoxView>
  13. BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
  14.   BoxView.Color>
  15.     Color x:FactoryMethod="FromHsla">
  16.       x:Arguments>
  17.         x:Double>0.23/x:Double>
  18.         x:Double>0.42/x:Double>
  19.         x:Double>0.69/x:Double>
  20.         x:Double>0.7/x:Double>
  21.       /x:Arguments>
  22.     /Color>
  23.   /BoxView.Color>
  24. /BoxView>
  25. BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
  26.   BoxView.Color>
  27.     Color x:FactoryMethod="FromHex">
  28.       x:Arguments>
  29.         x:String>#FF048B9A/x:String>
  30.       /x:Arguments>
  31.     /Color>
  32.   /BoxView.Color>
  33. /BoxView>


x:Arguments标签中元素的数量以及这些元素的类型必须与被调用的工厂方法的参数相匹配。 FromRgba工厂方法需要四个Int32参数,分别表示红色,绿色,蓝色和Alpha值,范围分别为0到255。 FromHsla工厂方法需要四个Double参数,它们分别代表色调,饱和度,亮度和alpha值,范围从0到1。 FromHex工厂方法需要一个表示十六进制(A)RGB颜色的字符串。
以下屏幕截图显示了使用指定的参数值调用每个Color工厂方法的结果:


指定泛型类型参数

泛型类型的构造函数的泛型类型参数可以使用x:TypeArguments属性指定,如以下代码示例所示:

点击(此处)折叠或打开

  1. ContentPage ...>
  2.   StackLayout>
  3.     StackLayout.Margin>
  4.       OnPlatform x:TypeArguments="Thickness">
  5.         On Platform="iOS" Value="0,20,0,0" />
  6.         On Platform="Android" Value="5, 10" />
  7.         On Platform="WinPhone, Windows" Value="10" />
  8.       /OnPlatform>
  9.     /StackLayout.Margin>
  10.   /StackLayout>
  11. /ContentPage>
OnPlatform类是一个泛型类,必须使用与目标类型匹配的x:TypeArguments属性来实例化。 在On类中,Platform属性可以接受单个字符串值或多个以逗号分隔的字符串值。 在这个例子中,StackLayout.Margin属性被设置为平台特定的厚度。


概要

本文演示了使用XAML属性,可用于将参数传递给非默认构造函数,调用工厂方法以及指定泛型参数的类型。

目录
相关文章
|
8月前
|
C#
WPF技术之Xaml Window
WPF Window 是一个 WPF 窗口类,它具有许多属性枚举可以控制窗口的外观和行为。
78 0
WPF技术之Xaml Window
【Xamarin.Forms】XAML编译——使用XAML编译器来提高Xamarin.Forms应用程序的性能
XAML可以选择使用XAML编译器(XAMLC)直接编译为中间语言(IL)。XAMLC提供了许多好处: 它执行XAML的编译时检查,通知用户任何错误。
1092 0
|
Android开发 Windows
【Xamarin.Forms】Xamarin.Forms的XAML预览器——查看您输入的Xamarin.Forms布局!
要求 项目需要使用最新的Xamarin.Forms NuGet包来使XAML预览器正常工作。 预览Android应用程序需要JDK 1.8 x64。发行说明中有更多信息。
2069 0
|
Android开发 iOS开发
【Xamarin.Forms】Xamarin.Forms 2.5.0中本体系Forms的发光之处
自从6月份我们预览了Native Forms以来,我们一直在努力平衡这些不足之处,并通过修复错误并整合来自社区的优秀反馈来为Xamarin.Forms 2.5.0打磨它。
1699 0
|
.NET
【Xamarin.Forms】XAML命名空间——将XAML名称空间声明为引用类型
XAML使用xmlns XML属性来进行名称空间声明。 本文将介绍XAML命名空间语法,并演示如何声明XAML命名空间以访问类型。 概观 有两个XAML名称空间声明总是在XAML文件的根元素中。
1255 0