Passar argumentos

Muitas vezes, é necessário instanciar objetos com construtores que exigem argumentos ou chamando um método de criação estático. Isso pode ser obtido no .NET Multi-platform App UI (.NET MAUI) XAML usando os x:Arguments atributos e x:FactoryMethod :

  • O x:Arguments atributo é usado para especificar argumentos do 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 do 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 atributo pode ser usado para especificar os argumentos de tipo genérico para o x:TypeArguments 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 as seguintes primitivas de linguagem XAML do .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 do x:DateTime, as outras primitivas de linguagem estão na especificação XAML 2009.

Observação

A x:Single primitiva de linguagem pode ser usada para passar float argumentos.

Passar argumentos do construtor

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

O exemplo a seguir demonstra o uso do 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 tag e os tipos desses elementos devem corresponder a Color um dos 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 float valores vermelhos, 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 em .NET MAUI XAML especificando o nome do método usando o atributo e seus argumentos usando o x:FactoryMethodx:Arguments atributo. Um método factory é 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 um número de métodos de fábrica e o exemplo a seguir demonstra chamar 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 factory 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 de matiz, saturação, luminosidade e alfa, variando de 0 a 1, respectivamente. O FromHex método factory requer um string argumento que representa a cor hexadecimal (A)RGB.

Especificar um argumento de tipo genérico

Os argumentos de tipo genérico para o construtor de um tipo genérico podem ser especificados usando o atributo x:TypeArguments , 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. Na classe, o OnPlatform atributo pode aceitar um único string valor ou vários valores delimitados string por vírgula. Neste exemplo, a StackLayout.Margin propriedade é definida como um arquivo específico da Thicknessplataforma.

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