Freigeben über


Übergeben von Argumenten in XAML

In diesem Artikel wird die Verwendung der XAML-Attribute veranschaulicht, die zum Übergeben von Argumenten an nicht standardmäßige Konstruktoren, zum Aufrufen von Factorymethoden und zum Angeben des Typs eines generischen Arguments verwendet werden können.

Übersicht

Es ist oft notwendig, Objekte mit Konstruktoren zu erzeugen, die Argumente erfordern, oder durch den Aufruf einer statischen Erstellungsmethode. Dies kann in XAML mithilfe der x:Arguments folgenden Attribute x:FactoryMethod erreicht werden:

  • Das x:Arguments-Attribut wird verwendet, um Konstruktorargumente für einen Nicht-Standard-Konstruktor oder für eine Objektdeklaration einer Factory-Methode anzugeben. Weitere Informationen finden Sie unter Übergeben von Konstruktorargumenten.
  • Das x:FactoryMethod-Attribut wird verwendet, um eine Factory-Methode anzugeben, die zur Initialisierung eines Objekts verwendet werden kann. Weitere Informationen finden Sie unter Aufrufen von Factorymethoden.

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

Übergeben von Konstruktorargumenten

Argumente können mit dem Attribut x:Arguments an einen nicht standardmäßigen Konstruktor übergeben werden. Jedes Konstruktorargument muss innerhalb eines XML-Elements abgegrenzt werden, das den Typ des Arguments darstellt. Xamarin.Forms unterstützt die folgenden Elemente für grundlegende Typen:

  • 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

Das folgende Codebeispiel veranschaulicht die Verwendung des x:Arguments Attributs mit drei Color Konstruktoren:

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

Die Anzahl der Elemente innerhalb des x:Arguments-Tags und die Typen dieser Elemente müssen einem der Color-Konstruktoren entsprechen. Der Color-Konstruktor mit einem einzigen Parameter erfordert einen -Graustufenwert von 0 (schwarz) bis 1 (weiß). Der ColorKonstruktor mit drei Parametern erfordert einen roten, grünen und blauen Wert zwischen 0 und 1. Der ColorKonstruktor mit vier Parametern fügt einen Alphakanal als vierten Parameter hinzu.

Die folgenden Screenshots zeigen das Ergebnis des Aufrufs der einzelnen Color Konstruktoren mit den angegebenen Argumentwerten:

BoxView.Color mit x:Arguments angegeben

Aufrufen von Factorymethoden

Factorymethoden können in 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 Struktur definiert eine Reihe von Factorymethoden, und im folgenden Codebeispiel wird das Aufrufen von drei Methoden veranschaulicht:

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

Die Anzahl der Elemente innerhalb des x:Arguments-Tags und die Typen dieser Elemente müssen mit den Argumenten der aufzurufenden Factory-Methode übereinstimmen. Für die FromRgba Factorymethode sind vier Int32 Parameter erforderlich, die die Rot-, Grün-, Blau- und Alphawerte zwischen 0 und 255 darstellen. Für die FromHsla Factorymethode sind vier Double Parameter erforderlich, die den Farbton, die Sättigung, die Leuchtdichte und die Alphawerte zwischen 0 und 1 darstellen. Für die FromHex Factorymethode ist ein Wert String erforderlich, der die RGB-Farbe (Hexadezimalzahl) darstellt.

Die folgenden Screenshots zeigen das Ergebnis des Aufrufs jeder Color Factorymethode mit den angegebenen Argumentwerten:

BoxView.Color mit x:FactoryMethod und x:Arguments angegeben

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

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

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

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