Předávání argumentů v jazyce XAML
Tento článek ukazuje použití atributů XAML, které lze použít k předávání argumentů nevýchozí konstruktory, volání metod výroby a určení typu obecného argumentu.
Přehled
Je často nutné vytvořit instanci objektů pomocí konstruktorů, které vyžadují argumenty, nebo voláním metody statického vytvoření. Toho lze dosáhnout v jazyce XAML pomocí x:Argumentsx:FactoryMethod atributů a:
x:ArgumentsAtribut slouží k určení argumentů konstruktoru pro jiný než výchozí konstruktor nebo pro deklaraci objektu metody Factory. Další informace naleznete v tématu předávání argumentů konstruktoru.x:FactoryMethodAtribut slouží k určení metody objektu pro vytváření, kterou lze použít k inicializaci objektu. Další informace naleznete v tématu Calling Factory Methods.
Kromě toho x:TypeArguments atribut lze použít k určení argumentů obecného typu konstruktoru obecného typu. Další informace naleznete v tématu určení argumentu obecného typu.
Předávání argumentů konstruktoru
Argumenty lze předat konstruktoru, který není výchozí, pomocí x:Arguments atributu. Každý argument konstruktoru musí být oddělen v rámci elementu XML, který představuje typ argumentu. Xamarin.Forms podporuje následující prvky pro základní typy:
x:Arrayx:Booleanx:Bytex:Charx:DateTimex:Decimalx:Doublex:Int16x:Int32x:Int64x:Objectx:Singlex:Stringx:TimeSpan
Následující příklad kódu ukazuje použití x:Arguments atributu se třemi Color konstruktory:
<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>
Počet prvků v rámci x:Arguments značky a typy těchto elementů musí odpovídat jednomu z Color konstruktorů. ColorXamarin_Forms Color _Color__ctor_System_Double_ konstruktor data-LINKTYPE = "absolutní cesta >" s jedním parametrem vyžaduje hodnotu ve stupních šedi od 0 (černá) do 1 (bílá). ColorXamarin_Forms Color _Color__ctor_System_Double_System_Double_System_Double_ "data-LINKTYPE =" absolutní cesta ">konstruktor se třemi parametry vyžaduje červenou, zelenou a modrou hodnotu od 0 do 1. ColorXamarin_Forms Color _Color__ctor_System_Double_System_Double_System_Double_System_Double_ "data-LINKTYPE =" absolutní cesta ">konstruktor se čtyřmi parametry přidá alfa kanál jako čtvrtý parametr.
Následující snímky obrazovky ukazují výsledek volání každého Color konstruktoru se zadanými hodnotami argumentů:

Volání metod továrny
Metody výroby lze volat v jazyce XAML zadáním názvu metody pomocí x:FactoryMethod atributu a jeho argumenty pomocí x:Arguments atributu. Metoda Factory je public static metoda, která vrací objekty nebo hodnoty stejného typu jako třídu nebo strukturu, která definuje metody.
ColorStruktura definuje počet metod továrny a následující příklad kódu ukazuje, jak tři z nich zavolá:
<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>
Počet prvků v rámci x:Arguments značky a typy těchto elementů musí odpovídat argumentům metody objektu factory, která je volána. Xamarin_Forms _Color_FromRgba_System_Int32_System_Int32_System_Int32_System_Int32_ "data-LINKTYPE =" absolutní cesta ">FromRgba Metoda factory vyžaduje čtyři Int32 parametry, které reprezentují hodnoty červené, zelené, modré a alfa v rozsahu od 0 do 255. Metoda Xamarin_Forms _Color_FromHsla_System_Double_System_Double_System_Double_System_Double_ "data-LINKTYPE =" absolutní cesta ">FromHsla Factory vyžaduje čtyři Double parametry, které reprezentují hodnoty odstínů, sytosti, světelnosti a alfa v rozsahu od 0 do 1 v uvedeném pořadí. Metoda Xamarin_Forms _Color_FromHex_System_String_ "data-LINKTYPE =" absolutní cesta ">FromHex Factory vyžaduje String , aby představovala HEXADECIMÁLNÍ barvu (a) RGB.
Následující snímky obrazovky ukazují výsledek volání jednotlivých Color metod výroby se zadanými hodnotami argumentů:

Určení argumentu obecného typu
Argumenty obecného typu pro konstruktor obecného typu lze zadat pomocí x:TypeArguments atributu, jak je znázorněno v následujícím příkladu kódu:
<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>
OnPlatformTřída je obecná třída a musí se vytvořit instance s x:TypeArguments atributem, který odpovídá cílovému typu. Ve On třídě Xamarin_Forms On _On_Platform "data-LINKTYPE =" absolutní cestu ">Platform atribut může přijmout jednu string hodnotu nebo více hodnot oddělených čárkami string . V tomto příkladu je vlastnost Xamarin_Forms _View_Margin data-LINKTYPE = "absolutní cesta" >StackLayout.Margin nastavena na hodnotu specifickou pro platformu Thickness .
Další informace o argumentech obecného typu naleznete v tématu Generics in Xamarin.Forms XAML .
Stažení ukázky