Compartir a través de


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 con Array.
  • x:Boolean, que se corresponde con Boolean.
  • x:Byte, que se corresponde con Byte.
  • x:Char, que se corresponde con Char.
  • x:DateTime, que se corresponde con DateTime.
  • x:Decimal, que se corresponde con Decimal.
  • x:Double, que se corresponde con Double.
  • x:Int16, que se corresponde con Int16.
  • x:Int32, que se corresponde con Int32.
  • x:Int64, que se corresponde con Int64.
  • x:Object, que se corresponde con Object.
  • x:Single, que se corresponde con Single.
  • x:String, que se corresponde con String.
  • x:TimeSpan, que se corresponde con TimeSpan.

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.