Předávání argumentů v jazyce XAML

Ukázka stažení Stažení ukázky

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: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

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ů:

BoxView. Color – zadáno s X:Arguments –

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ů:

BoxView. Color – zadáno s X:FactoryMethod – a X:Arguments –

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 .