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 aArray
.x:Boolean
, que corresponde aBoolean
.x:Byte
, que corresponde aByte
.x:Char
, que corresponde aChar
.x:DateTime
, que corresponde aDateTime
.x:Decimal
, que corresponde aDecimal
.x:Double
, que corresponde aDouble
.x:Int16
, que corresponde aInt16
.x:Int32
, que corresponde aInt32
.x:Int64
, que corresponde aInt64
.x:Object
, que corresponde aoObject
.x:Single
, que corresponde aSingle
.x:String
, que corresponde aString
.x:TimeSpan
, que corresponde aTimeSpan
.
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:FactoryMethod
x: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 On
Platform
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 Thickness
plataforma.
Para obter mais informações sobre argumentos de tipo genéricos, consulte Genéricos em XAML.