Passaggio di argomenti in XAML
Questo articolo illustra l'uso degli attributi XAML che possono essere usati per passare argomenti a costruttori non predefiniti, per chiamare i metodi factory e per specificare il tipo di un argomento generico.
Panoramica
Spesso è necessario creare un'istanza di oggetti con costruttori che richiedono argomenti o chiamando un metodo di creazione statica. Questa operazione può essere ottenuta in XAML usando gli x:Arguments
attributi e x:FactoryMethod
:
- L'attributo
x:Arguments
viene usato per specificare gli argomenti del costruttore per un costruttore non predefinito o per una dichiarazione di oggetto metodo factory. Per altre informazioni, vedere Passaggio di argomenti del costruttore. - L'attributo
x:FactoryMethod
viene utilizzato per specificare un metodo factory che può essere utilizzato per inizializzare un oggetto . Per altre informazioni, vedere Chiamata di metodi factory.
Inoltre, l'attributo x:TypeArguments
può essere usato per specificare gli argomenti di tipo generico per il costruttore di un tipo generico. Per altre informazioni, vedere Specifica di un argomento di tipo generico.
Passaggio di argomenti del costruttore
Gli argomenti possono essere passati a un costruttore non predefinito usando l'attributo x:Arguments
. Ogni argomento del costruttore deve essere delimitato all'interno di un elemento XML che rappresenta il tipo dell'argomento. Xamarin.Forms supporta gli elementi seguenti per i tipi di base:
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
L'esempio di codice seguente illustra l'uso dell'attributo x:Arguments
con tre Color
costruttori:
<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>
Il numero di elementi all'interno del x:Arguments
tag e i tipi di questi elementi devono corrispondere a uno dei Color
costruttori. Il Color
costruttore con un singolo parametro richiede un valore in scala di grigi compreso tra 0 (nero) e 1 (bianco). Il Color
costruttore con tre parametri richiede un valore rosso, verde e blu compreso tra 0 e 1. Il Color
costruttore con quattro parametri aggiunge un canale alfa come quarto parametro.
Gli screenshot seguenti mostrano il risultato della chiamata di ogni Color
costruttore con i valori dell'argomento specificati:
Chiamata dei metodi factory
I metodi factory possono essere chiamati in XAML specificando il nome del metodo usando l'attributo x:FactoryMethod
e i relativi argomenti usando l'attributo x:Arguments
. Un metodo factory è un public static
metodo che restituisce oggetti o valori dello stesso tipo della classe o della struttura che definisce i metodi.
La Color
struttura definisce diversi metodi factory e l'esempio di codice seguente illustra la chiamata di tre metodi:
<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>
Il numero di elementi all'interno del x:Arguments
tag e i tipi di questi elementi devono corrispondere agli argomenti del metodo factory chiamato. Il FromRgba
metodo factory richiede quattro Int32
parametri, che rappresentano rispettivamente i valori rosso, verde, blu e alfa, compresi tra 0 e 255. Il FromHsla
metodo factory richiede quattro Double
parametri, che rappresentano rispettivamente la tonalità, la saturazione, la luminosità e i valori alfa, compresi tra 0 e 1. Il FromHex
metodo factory richiede un String
oggetto che rappresenta il colore RGB (A)esadecimale.
Gli screenshot seguenti mostrano il risultato della chiamata di ogni Color
metodo factory con i valori dell'argomento specificati:
Specifica di un argomento di tipo generico
È possibile specificare argomenti di tipo generico per il costruttore di un tipo generico usando l'attributo x:TypeArguments
, come illustrato nell'esempio di codice seguente:
<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>
La OnPlatform
classe è una classe generica e deve essere creata un'istanza con un x:TypeArguments
attributo che corrisponde al tipo di destinazione. On
Nella classe l'attributo Platform
può accettare un singolo string
valore o più valori delimitati da string
virgole. In questo esempio la StackLayout.Margin
proprietà è impostata su un oggetto specifico Thickness
della piattaforma.
Per altre informazioni sugli argomenti di tipo generico, vedi Generics in Xamarin.Forms XAML.