Udostępnij za pośrednictwem


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:

BoxView.Color określony z argumentami x:Argumenty

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:

BoxView.Color określony z x:FactoryMethod i x:Arguments

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 Thicknessplatformy .

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).