Pasar argumentos
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 .la interfaz de usuario de aplicaciones multiplataforma de .NET (.NET MAUI) XAML con 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 más información, consulta 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 más información, consulta Llamar a métodos de fábrica.
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 más información, consulta Especificación de un argumento de tipo genérico.
Los argumentos se pueden pasar a constructores y métodos de fábrica mediante los siguientes primitivos de lenguaje XAML de .NET MAUI:
x:Array
, que se corresponde conArray
.x:Boolean
, que se corresponde conBoolean
.x:Byte
, que se corresponde conByte
.x:Char
, que se corresponde conChar
.x:DateTime
, que se corresponde conDateTime
.x:Decimal
, que se corresponde conDecimal
.x:Double
, que se corresponde conDouble
.x:Int16
, que se corresponde conInt16
.x:Int32
, que se corresponde conInt32
.x:Int64
, que se corresponde conInt64
.x:Object
, que se corresponde conObject
.x:Single
, que se corresponde conSingle
.x:String
, que se corresponde conString
.x:TimeSpan
, que se corresponde conTimeSpan
.
Con la excepción de x:DateTime
, los otros primitivos de lenguaje se encuentran en la especificación XAML 2009.
Nota:
El primitivo de lenguaje x:Single
se puede usar para pasar argumentos float
.
Pasar argumentos del 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.
En el ejemplo siguiente se muestra cómo usar el atributo x:Arguments
con tres constructores Color diferentes:
<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>
El número de elementos de la etiqueta x:Arguments
y sus tipos deben coincidir con uno de los constructores Color. El constructor Color con un único parámetro requiere un valor float
de escala de grises de 0 (negro) a 1 (blanco). El constructor Color con tres parámetros requiere valores float
en rojo, verde y azul que van de 0 a 1. El constructor Color con cuatro parámetros agrega un canal alfa float
como cuarto parámetro.
Llamar a métodos de fábrica
Los métodos de fábrica se pueden llamar en XAML de .NET MAUI 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 clase Color define una serie de métodos de fábrica y en el ejemplo 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: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>
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 método de fábrica FromRgba
requiere cuatro argumentos byte
, que representan los valores rojo, verde, azul y alfa, que van de 0 a 255 respectivamente. El método de fábrica FromHsla
requiere cuatro argumentos float
, que representan el matiz, la saturación, la luminosidad y los valores alfa, que van de 0 a 1 respectivamente. El método de fábrica FromHex
requiere un argumento string
que representa el color hexadecimal (A)RGB.
Especificación de un argumento de tipo genérico
Los argumentos de tipo genérico para el constructor de un tipo genérico se pueden especificar con el atributo x:TypeArguments
, como se muestra en el ejemplo siguiente:
<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>
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érico, consulta Genéricos en XAML.