Przekazywanie argumentów w języku XAML
W tym artykule przedstawiono użycie atrybutów XAML, które mogą służyć do przekazywania argumentów do konstruktorów innych niż domyślne, do wywoływania metod fabryki i określania typu argumentu ogólnego.
Omówienie
Często konieczne jest utworzenie wystąpienia obiektów przy użyciu konstruktorów wymagających argumentów lub wywołanie metody tworzenia statycznego. Można to osiągnąć w języku XAML przy użyciu x:Arguments
atrybutów i x:FactoryMethod
:
- Atrybut służy do określania
x:Arguments
argumentów konstruktora dla konstruktora innego niż domyślny lub dla deklaracji obiektu metody fabryki. Aby uzyskać więcej informacji, zobacz Przekazywanie argumentów konstruktora. - Atrybut
x:FactoryMethod
służy do określania metody fabryki, która może służyć do inicjowania obiektu. Aby uzyskać więcej informacji, zobacz Wywoływanie metod fabryki.
Ponadto x:TypeArguments
atrybut może służyć do określania argumentów typu ogólnego konstruktora typu ogólnego. Aby uzyskać więcej informacji, zobacz Określanie argumentu typu ogólnego.
Przekazywanie argumentów konstruktora
Argumenty można przekazać do konstruktora innego niż domyślny przy użyciu atrybutu x:Arguments
. Każdy argument konstruktora musi być rozdzielany w elememencie XML reprezentującym typ argumentu. Xamarin.Forms program obsługuje następujące elementy dla typów podstawowych:
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
W poniższym przykładzie kodu pokazano użycie atrybutu x:Arguments
z trzema Color
konstruktorami:
<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>
Liczba elementów w tagu x:Arguments
i typy tych elementów muszą być zgodne z jednym z Color
konstruktorów. Konstruktor Color
z pojedynczym parametrem wymaga wartości skali szarości od 0 (czarnej) do 1 (białej). Konstruktor z trzema Color
parametrami wymaga czerwonej, zielonej i niebieskiej wartości z zakresu od 0 do 1. Konstruktor z czterema Color
parametrami dodaje kanał alfa jako czwarty parametr.
Na poniższych zrzutach ekranu przedstawiono wynik wywołania każdego Color
konstruktora z określonymi wartościami argumentu:
Wywoływanie metod fabryki
Metody fabryki można wywoływać w języku XAML, określając nazwę metody przy użyciu atrybutu x:FactoryMethod
i jej argumenty przy użyciu atrybutu x:Arguments
. Metoda fabryki to public static
metoda, która zwraca obiekty lub wartości tego samego typu co klasa lub struktura, która definiuje metody.
Struktura Color
definiuje szereg metod fabrycznych, a poniższy przykład kodu pokazuje wywołanie trzech z nich:
<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>
Liczba elementów w tagu x:Arguments
i typy tych elementów muszą być zgodne z argumentami wywoływanej metody fabryki. Metoda FromRgba
fabryki wymaga czterech Int32
parametrów, które reprezentują odpowiednio wartości czerwone, zielone, niebieskie i alfa, od 0 do 255. Metoda FromHsla
fabryki wymaga czterech Double
parametrów, które reprezentują odcienie, nasycenie, jasność i wartości alfa, odpowiednio od 0 do 1. Metoda FromHex
fabryki wymaga symbolu String
reprezentującego kolor szesnastkowy (A)RGB.
Na poniższych zrzutach ekranu przedstawiono wynik wywołania każdej Color
metody fabryki z określonymi wartościami argumentu:
Określanie argumentu typu ogólnego
Argumenty typu ogólnego dla konstruktora typu ogólnego można określić przy użyciu atrybutu x:TypeArguments
, jak pokazano w poniższym przykładzie kodu:
<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>
Klasa OnPlatform
jest klasą ogólną i musi zostać utworzone wystąpienie z atrybutem zgodnym x:TypeArguments
z typem docelowym. On
W klasie Platform
atrybut może akceptować pojedynczą string
wartość lub wiele wartości rozdzielonych string
przecinkami. W tym przykładzie StackLayout.Margin
właściwość jest ustawiona na specyficzną dla Thickness
platformy .
Aby uzyskać więcej informacji na temat argumentów typów ogólnych, zobacz Generics in XAML (Typy ogólne w Xamarin.Forms języku XAML).