博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Xamarin.Forms】在XAML中传递参数
阅读量:6796 次
发布时间:2019-06-26

本文共 3115 字,大约阅读时间需要 10 分钟。

本文演示了如何使用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属性,可用于将参数传递给非默认构造函数,调用工厂方法以及指定泛型参数的类型。

转载地址:http://jclgo.baihongyu.com/

你可能感兴趣的文章
linux网站搭建实例
查看>>
OSPF的多域配置--OSPF+RIP
查看>>
生成chm文档的方法
查看>>
xen虚拟机进入单用户模式的方法
查看>>
创建powershell模块
查看>>
Android应用程序绑定服务(bindService)的过程源代码分析(1)
查看>>
《Jquery实战》第3版:译者序 Frank Xu Lei
查看>>
sqlalchemy(一)基本操作
查看>>
Distributed4:SQL Server 分布式数据库性能测试
查看>>
算法作业:求一个集合中所有子集元素之和
查看>>
【算法习作】已知有一个数字在某数组中出现次数超过一半,求这个数
查看>>
EBS系统慢问题 - _undo_autotune=false
查看>>
git pull使用【转】
查看>>
性能调优:理解Set Statistics Time输出
查看>>
CTP多点触摸协议【转】
查看>>
通过CLR同步SQL Server和Sharepoint List数据(四)
查看>>
我理解的一个程序员如何学习前端开发
查看>>
地址转换函数
查看>>
Linux内核驱动之延时 【转】
查看>>
Portal的简单使用
查看>>