Passando argumentos em XAML
Este artigo demonstra o uso dos atributos XAML que podem ser usados para passar argumentos para construtores não padrão, chamar métodos de fábrica e especificar o tipo de um argumento genérico.
Geralmente, é necessário instanciar objetos com construtores que exigem argumentos ou chamando um método de criação estático. Isso pode ser feito em XAML usando os x:Arguments
atributos and 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 Passando 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 Chamando métodos de fábrica.
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 Especificando um argumento de tipo genérico.
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. Xamarin.Forms Suporta os seguintes elementos para tipos básicos:
x:Array
x:Boolean
x:Byte
x:Char
x:DateTime
x:Decimal
x:Double
x:Int16
x:Int32
x:Int64
x:Object
x:Single
x:String
x:TimeSpan
O exemplo de código a seguir demonstra o uso do x:Arguments
atributo com três Color
construtores:
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Double>0.9</x:Double>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Double>0.25</x:Double>
<x:Double>0.5</x:Double>
<x:Double>0.75</x:Double>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Double>0.8</x:Double>
<x:Double>0.5</x:Double>
<x:Double>0.2</x:Double>
<x:Double>0.5</x:Double>
</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 de cinza de 0 (preto) a 1 (branco). O Color
construtor com três parâmetros requer um valor vermelho, verde e azul variando de 0 a 1. O Color
construtor com quatro parâmetros adiciona um canal alfa como o quarto parâmetro.
As capturas de tela a seguir mostram o resultado da chamada de cada Color
construtor com os valores de argumento especificados:
Os métodos de fábrica podem ser chamados em XAML 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
estrutura define vários métodos de fábrica e o exemplo de código 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:Int32>192</x:Int32>
<x:Int32>75</x:Int32>
<x:Int32>150</x:Int32>
<x:Int32>128</x:Int32>
</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
tag 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 Int32
parâmetros, que representam os valores vermelho, verde, azul e alfa, variando de 0 a 255, respectivamente. O FromHsla
método de fábrica requer quatro Double
parâmetros, que representam os valores de matiz, saturação, luminosidade e alfa, variando de 0 a 1, respectivamente. O FromHex
método de fábrica requer um String
que represente a cor hexadecimal (A)RGB.
As capturas de tela a seguir mostram o resultado da chamada de cada Color
método de fábrica com os valores de argumento especificados:
Os 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 de código a seguir:
<ContentPage ...>
<StackLayout>
<StackLayout.Margin>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0,20,0,0" />
<On Platform="Android" Value="5, 10" />
<On Platform="UWP" Value="10" />
</OnPlatform>
</StackLayout.Margin>
</StackLayout>
</ContentPage>
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 Platform
atributo pode aceitar um único string
valor ou vários valores delimitados por string
vírgulasOn
. Neste exemplo, a StackLayout.Margin
propriedade é definida como um Thickness
.
Para obter mais informações sobre argumentos de tipo genérico, consulte Genéricos em Xamarin.Forms XAML.