Paso de argumentos en XAML
En este artículo se muestra cómo usar los atributos XAML que se pueden usar para pasar argumentos a constructores no predeterminados, llamar a Factory Methods y especificar el tipo de un argumento genérico.
Información general
A menudo es necesario crear instancias de objetos con constructores que requieran argumentos o llamar a un método de creación estático. Esto se puede lograr en XAML mediante los atributos x:Arguments
y x:FactoryMethod
:
- El atributo
x:Arguments
se usa para especificar argumentos de constructor para un constructor no predeterminado o para una declaración de objeto de método de fábrica. Para obtener más información, vea Pasar argumentos de constructor. - El atributo
x:FactoryMethod
se usa para especificar un método de fábrica que se puede usar para inicializar un objeto. Para obtener más información, vea Llamar a Factory Methods.
Además, el atributo x:TypeArguments
puede usarse para especificar los argumentos de tipo genérico para el constructor de un tipo genérico. Para obtener más información, vea Especificar un argumento de tipo genérico.
Paso de argumentos de constructor
Los argumentos se pueden pasar a un constructor no predeterminado con el atributo x:Arguments
. Cada argumento de constructor debe delimitarse dentro de un elemento XML que represente el tipo del argumento. Xamarin.Forms admite los siguientes elementos para los tipos básicos:
x:Array
x:Boolean
x:Byte
x:Char
x:DateTime
x:Decimal
x:Double
x:Int16
x:Int32
x:Int64
x:Object
x:Single
x:String
x:TimeSpan
En el ejemplo de código siguiente se muestra el uso del atributo x:Arguments
con tres constructores Color
:
<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>
El número de elementos de la etiqueta x:Arguments
y sus tipos deben coincidir con uno de los constructores Color
. El Color
constructor con un único parámetro requiere un valor de escala de grises de 0 (negro) a 1 (blanco). El Color
constructor con tres parámetros requiere un valor rojo, verde y azul comprendido entre 0 y 1. El Color
constructor con cuatro parámetros agrega un canal alfa como cuarto parámetro.
Las capturas de pantalla siguientes muestran el resultado de llamar a cada constructor Color
con los valores de argumento especificados:
Llamar a Factory Methods
Los Factory Methods se pueden llamar en XAML especificando el nombre del método mediante el atributo x:FactoryMethod
y sus argumentos mediante el atributo x:Arguments
. Un método de fábrica es un método public static
que devuelve objetos o valores del mismo tipo que la clase o estructura que define los métodos.
La estructura Color
define una serie de Factory Methods y en el ejemplo de código siguiente se muestra cómo llamar a tres de ellos:
<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>
El número de elementos dentro de la etiqueta x:Arguments
y los tipos de estos elementos deben coincidir con los argumentos del método de fábrica al que se llama. El Factory Method FromRgba
requiere cuatro parámetros Int32
, que representan los valores rojo, verde, azul y alfa, que van de 0 a 255 respectivamente. El Factory Method FromHsla
requiere cuatro parámetros Double
, que representan el tono, la saturación, la luminosidad y los valores alfa, que van de 0 a 1 respectivamente. El Factory Method FromHex
requiere un String
que representa el color hexadecimal (A)RGB.
En las capturas de pantalla siguientes se muestra el resultado de llamar a cada Factory Method Color
con los valores de argumento especificados:
Especificar un argumento de tipo genérico
Los argumentos de tipo genérico para el constructor de un tipo genérico se pueden especificar mediante el atributo x:TypeArguments
, como se muestra en el ejemplo de código siguiente:
<ContentPage ...>
<StackLayout>
<StackLayout.Margin>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0,20,0,0" />
<On Platform="Android" Value="5, 10" />
<On Platform="UWP" Value="10" />
</OnPlatform>
</StackLayout.Margin>
</StackLayout>
</ContentPage>
La clase OnPlatform
es una clase genérica y se debe crear una instancia de ella con un atributo x:TypeArguments
que coincida con el tipo de destino. En la clase On
, el atributo Platform
puede aceptar un valor string
único o varios valores string
delimitados por comas. En este ejemplo, la propiedad StackLayout.Margin
se establece en un valor Thickness
específico de la plataforma.
Para obtener más información sobre los argumentos de tipo genéricos, consulte Genéricos en Xamarin.Forms XAML.