Passar argumentos

Geralmente, é necessário instanciar objetos com construtores que exigem argumentos ou chamando um método de criação estático. Isso pode ser obtido no XAML da interface do usuário de aplicativo multiplataforma do .NET (.NET MAUI) usando os x:Arguments atributos e x:FactoryMethod :

  • O x:Arguments atributo é usado para especificar argumentos de construtor para um construtor não padrão ou para uma declaração de objeto de método de fábrica. Para obter mais informações, consulte Passar argumentos de construtor.
  • O x:FactoryMethod atributo é usado para especificar um método de fábrica que pode ser usado para inicializar um objeto . Para obter mais informações, consulte Métodos de fábrica de chamadas.

Além disso, o x:TypeArguments atributo pode ser usado para especificar os argumentos de tipo genérico para o construtor de um tipo genérico. Para obter mais informações, consulte Especificar um argumento de tipo genérico.

Os argumentos podem ser passados para construtores e métodos de fábrica usando os seguintes primitivos de linguagem XAML .NET MAUI:

  • x:Array, que corresponde a Array.
  • x:Boolean, que corresponde a Boolean.
  • x:Byte, que corresponde a Byte.
  • x:Char, que corresponde a Char.
  • x:DateTime, que corresponde a DateTime.
  • x:Decimal, que corresponde a Decimal.
  • x:Double, que corresponde a Double.
  • x:Int16, que corresponde a Int16.
  • x:Int32, que corresponde a Int32.
  • x:Int64, que corresponde a Int64.
  • x:Object, que corresponde ao Object.
  • x:Single, que corresponde a Single.
  • x:String, que corresponde a String.
  • x:TimeSpan, que corresponde a TimeSpan.

Com exceção de x:DateTime, os outros primitivos de linguagem estão na especificação XAML 2009.

Observação

O x:Single primitivo de linguagem pode ser usado para passar float argumentos.

Passar argumentos de construtor

Os argumentos podem ser passados para um construtor não padrão usando o x:Arguments atributo . Cada argumento de construtor deve ser delimitado dentro de um elemento XML que representa o tipo do argumento.

O exemplo a seguir demonstra como usar o x:Arguments atributo com três construtores diferentes Color :

<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>

O número de elementos dentro da x:Arguments marca e os tipos desses elementos devem corresponder a um dos Color construtores. O Color construtor com um único parâmetro requer um valor de escala float de cinza de 0 (preto) a 1 (branco). O Color construtor com três parâmetros requer valores vermelhos float , verdes e azuis que variam de 0 a 1. O Color construtor com quatro parâmetros adiciona um float canal alfa como o quarto parâmetro.

Métodos de fábrica de chamadas

Os métodos de fábrica podem ser chamados no XAML do .NET MAUI especificando o nome do método usando o x:FactoryMethod atributo e seus argumentos usando o x:Arguments atributo . Um método de fábrica é um public static método que retorna objetos ou valores do mesmo tipo que a classe ou estrutura que define os métodos.

A Color classe define vários métodos de fábrica e o exemplo a seguir demonstra a chamada de três deles:

<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>

O número de elementos dentro da x:Arguments marca e os tipos desses elementos devem corresponder aos argumentos do método de fábrica que está sendo chamado. O FromRgba método de fábrica requer quatro byte argumentos, que representam os valores vermelho, verde, azul e alfa, variando de 0 a 255, respectivamente. O FromHsla método de fábrica requer quatro float argumentos, que representam os valores matiz, saturação, luminosidade e alfa, variando de 0 a 1, respectivamente. O FromHex método de fábrica requer um string argumento que representa a cor hexadecimal (A)RGB.

Especificar um argumento de tipo genérico

Argumentos de tipo genérico para o construtor de um tipo genérico podem ser especificados usando o x:TypeArguments atributo , conforme demonstrado no exemplo a seguir:

<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>

A OnPlatform classe é uma classe genérica e deve ser instanciada com um x:TypeArguments atributo que corresponda ao tipo de destino. On Na classe , o Platform atributo pode aceitar um único string valor ou vários valores delimitados por vírgulasstring. Neste exemplo, a StackLayout.Margin propriedade é definida como uma específica Thicknessda plataforma.

Para obter mais informações sobre argumentos de tipo genérico, consulte Genéricos em XAML.