Przekazywanie argumentów
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 wieloplatformowym interfejsie użytkownika aplikacji platformy .NET (.NET MAUI) 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.
Argumenty mogą być przekazywane do konstruktorów i metod fabrycznych przy użyciu następujących typów pierwotnych języka XAML .NET MAUI:
x:Array
, który odpowiada .Array
x:Boolean
, który odpowiada .Boolean
x:Byte
, który odpowiada .Byte
x:Char
, który odpowiada .Char
x:DateTime
, który odpowiada .DateTime
x:Decimal
, który odpowiada .Decimal
x:Double
, który odpowiada .Double
x:Int16
, który odpowiada .Int16
x:Int32
, który odpowiada .Int32
x:Int64
, który odpowiada .Int64
x:Object
, który odpowiada elementowiObject
.x:Single
, który odpowiada .Single
x:String
, który odpowiada .String
x:TimeSpan
, który odpowiada .TimeSpan
Z wyjątkiem klasy x:DateTime
, inne typy pierwotne języka znajdują się w specyfikacji XAML 2009.
Uwaga
Język x:Single
pierwotny może służyć do przekazywania float
argumentów.
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.
W poniższym przykładzie pokazano użycie atrybutu x:Arguments
z trzema różnymi Color konstruktorami:
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Single>0.9</x:Single>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Single>0.25</x:Single>
<x:Single>0.5</x:Single>
<x:Single>0.75</x:Single>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Single>0.8</x:Single>
<x:Single>0.5</x:Single>
<x:Single>0.2</x:Single>
<x:Single>0.5</x:Single>
</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 float
szarości od 0 (czarnej) do 1 (białej). Konstruktor z trzema Color parametrami wymaga float
czerwonych, zielonych i niebieskich wartości z zakresu od 0 do 1. Konstruktor z czterema Color parametrami dodaje float
kanał alfa jako czwarty parametr.
Wywoływanie metod fabryki
Metody fabryki można wywoływać w języku .NET MAUI 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.
Klasa Color definiuje szereg metod fabrycznych, a w poniższym przykładzie pokazano wywołanie trzech z nich:
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromRgba">
<x:Arguments>
<x:Byte>192</x:Byte>
<x:Byte>75</x:Byte>
<x:Byte>150</x:Byte>
<x:Byte>128</x:Byte>
</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 byte
argumentów, które reprezentują odpowiednio wartości czerwone, zielone, niebieskie i alfa, od 0 do 255. Metoda FromHsla
fabryki wymaga czterech float
argumentów, które reprezentują odcienie, nasycenie, jasność i wartości alfa, odpowiednio od 0 do 1. Metoda FromHex
fabryki wymaga argumentu string
reprezentującego kolor szesnastkowy (A)RGB.
Określanie argumentu typu ogólnego
Argumenty typu ogólnego konstruktora typu ogólnego można określić przy użyciu atrybutu x:TypeArguments
, jak pokazano w poniższym przykładzie:
<StackLayout>
<StackLayout.Margin>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0,20,0,0" />
<On Platform="Android" Value="5, 10" />
</OnPlatform>
</StackLayout.Margin>
</StackLayout>
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 języku XAML).