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.
Visão geral
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.
Passando argumentos do 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. 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:
Chamando métodos de fábrica
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:
Especificando 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 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.