Teilen über


Übergeben von Argumenten

Es ist häufig erforderlich, Objekte mit Konstruktoren zu instanziieren, die Argumente erfordern, oder durch Aufrufen einer statischen Erstellungsmethode. Dies kann in .NET Multi-Platform App UI (.NET MAUI)-XAML mithilfe der x:Arguments folgenden x:FactoryMethod-Attribute erreicht werden:

  • Das x:Arguments-Attribut wird verwendet, um Konstruktorargumente für einen nicht standardmäßigen Konstruktor oder für eine Factory-Methoden-Objektdeklaration anzugeben. Weitere Informationen finden Sie unter Konstruktorargumente weitergeben.
  • Das x:FactoryMethod-Attribut wird verwendet, um eine Factorymethode anzugeben, die zum Initialisieren eines Objekts verwendet werden kann. Weitere Informationen finden Sie unter Factory-Methoden aufrufen.

Darüber hinaus kann das x:TypeArguments-Attribut verwendet werden, um die generischen Typargumente für den Konstruktor eines generischen Typs anzugeben. Weitere Informationen finden Sie unter Angeben eines generischen Typarguments.

Argumente können mithilfe der folgenden .NET MAUI XAML-Sprachgrundtypen an Konstruktoren und Factorymethoden übergeben werden:

  • x:Array, was Array entspricht.
  • x:Boolean, was Boolean entspricht.
  • x:Byte, was Byte entspricht.
  • x:Char, was Char entspricht.
  • x:DateTime, was DateTime entspricht.
  • x:Decimal, was Decimal entspricht.
  • x:Double, was Double entspricht.
  • x:Int16, was Int16 entspricht.
  • x:Int32, was Int32 entspricht.
  • x:Int64, was Int64 entspricht.
  • x:Object, was Object entspricht.
  • x:Single, was Single entspricht.
  • x:String, was String entspricht.
  • x:TimeSpan, was TimeSpan entspricht.

Mit Ausnahme von x:DateTime, befinden sich die anderen Sprachgrundtype nin der XAML 2009-Spezifikation.

Hinweis

Der x:Single-Sprachgrundtyp kann zum Übergeben von float-Argumenten verwendet werden.

Konstruktorargumente weitergeben

Argumente können mithilfe des x:Arguments-Attributs an einen nicht standardmäßigen Konstruktor übergeben werden. Jedes Konstruktorargument muss innerhalb eines XML-Elements getrennt werden, das den Typ des Arguments darstellt.

Das folgende Beispiel veranschaulicht die Verwendung des x:Arguments-Attributs mit drei verschiedenen Color-Konstruktoren:

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

Die Anzahl der Elemente innerhalb des x:Arguments-Tags und die Typen dieser Elemente müssen mit einem der Color-Konstruktoren übereinstimmen. Der Color-Konstruktor mit einem einzelnen Parameter erfordert einen Graustufenwert float von 0 (schwarz) bis 1 (weiß). Der Color-Konstruktor mit drei Parametern erfordert float rote, grüne und blaue Werte zwischen 0 und 1. Der Color-Konstruktor mit vier Parametern fügt einen float-Alphakanal als vierten Parameter hinzu.

Aufrufen von Factory-Methoden

Factorymethoden können in .NET MAUI XAML aufgerufen werden, indem sie den Namen der Methode mithilfe des x:FactoryMethod-Attributs und deren Argumente mithilfe des x:Arguments-Attributs angeben. Eine Factory-Methode ist eine public static-Methode, die Objekte oder Werte desselben Typs zurückgibt wie die Klasse oder Struktur, die die Methoden definiert.

Die Color-Klasse definiert eine Reihe von Factorymethoden, und im folgenden Beispiel wird das Aufrufen von drei Methoden veranschaulicht:

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

Die Anzahl der Elemente innerhalb des x:Arguments-Tags und die Typen dieser Elemente müssen mit den Argumenten der aufgerufenen Factory-Methode übereinstimmen. Für die FromRgba-Factory-Methode sind vier byte-Argumente erforderlich, die die Rot-, Grün-, Blau- und Alphawerte zwischen 0 und 255 darstellen. Für die FromHsla-Factory-Methode sind vier float-Argumente erforderlich, die den Farbton, die Sättigung, die Leuchtdichte und die Alphawerte zwischen 0 und 1 darstellen. Die FromHex-Factory-Methode erfordert ein string-Argument, das die Hexadezimalfarbe (A)RGB-Farbe darstellt.

Angeben eines generischen Typarguments

Generische Typargumente für den Konstruktor eines generischen Typs können mithilfe des x:TypeArguments-Attributs angegeben werden, wie im folgenden Beispiel veranschaulicht:

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

OnPlatform ist eine generische Klasse, und sie muss mit einem x:TypeArguments-Attribut instanziiert werden, das dem Zieltyp entspricht. In der On-Klasse kann das Platform-Attribut einen einzelnen string-Wert oder mehrere durch Trennzeichen getrennte string-Werte akzeptieren. In diesem Beispiel wird die StackLayout.Margin-Eigenschaft auf eine plattformspezifische Thickness-Eigenschaft festgelegt.

Weitere Informationen zu generischen Typargumenten finden Sie unter Generics in XAML.