Udostępnij za pośrednictwem


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 elementowi Object.
  • 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 Thicknessplatformy .

Aby uzyskać więcej informacji na temat argumentów typów ogólnych, zobacz Generics in XAML (Typy ogólne w języku XAML).