Übergeben von Argumenten in XAML

Download Sample Das Beispiel herunterladen

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

Überblick

Es ist oft notwendig, Objekte mit Konstruktoren zu instanziieren, die Argumente erfordern, oder indem sie eine statische Erstellungsmethode aufrufen. Dies kann in 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 Werksmethodeobjektdeklaration anzugeben. Weitere Informationen finden Sie unter Übergeben von Konstruktorargumenten.
  • Das x:FactoryMethod Attribut wird verwendet, um eine Factorymethode anzugeben, die zum Initialisieren eines Objekts verwendet werden kann. Weitere Informationen finden Sie unter Aufrufen von Factory-Methoden.

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.

Übergeben von Konstruktorargumenten

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

Im folgenden Codebeispiel wird die Verwendung des x:Arguments Attributs mit drei Color Konstruktoren veranschaulicht:

<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 im x:Arguments Tag und die Typen dieser Elemente müssen mit einem der Color Konstruktoren übereinstimmen. Der ColorKonstruktor mit einem einzelnen Parameter erfordert einen Graustufenwert von 0 (Schwarz) bis 1 (Weiß). Der ColorKonstruktor mit drei Parametern erfordert einen roten, grünen und blauen Wert von 0 bis 1. Der ColorKonstruktor mit vier Parametern fügt einen Alphakanal als vierter Parameter hinzu.

Die folgenden Screenshots zeigen das Ergebnis des Aufrufens jedes Color Konstruktors mit den angegebenen Argumentwerten:

BoxView.Color specified with x:Arguments

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 Factorymethode ist eine public static Methode, die Objekte oder Werte desselben Typs wie die Klasse oder Struktur zurückgibt, die die Methoden definiert.

Die Struktur definiert eine Reihe von Fabrikmethoden, und das Color folgende Codebeispiel veranschaulicht den Aufruf von drei dieser Methoden:

<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 im x:Arguments Tag und die Typen dieser Elemente müssen mit den Argumenten der aufgerufenen Fabrikmethode übereinstimmen. Die FromRgba Fabrikmethode erfordert vier Int32 Parameter, die die roten, grünen, blauen und Alphawerte darstellen, zwischen 0 und 255. Die FromHsla Fabrikmethode erfordert vier Double Parameter, die den Farbton, die Sättigung, die Luminosität und die Alphawerte darstellen, zwischen 0 und 1. Die FromHex Fabrikmethode erfordert eine String , die die Hexadezimalfarbe (A)RGB-Farbe darstellt.

Die folgenden Screenshots zeigen das Ergebnis des Aufrufens jeder Color Fabrikmethode mit den angegebenen Argumentwerten:

BoxView.Color specified with x:FactoryMethod and x:Arguments

Angeben eines generischen Typarguments

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

<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 instanziiert werden, das dem Zieltyp entspricht. In der On Klasse kann das Platform Attribut einen einzelnen string Wert oder mehrere Trennzeichenwerte string akzeptieren. In diesem Beispiel wird die StackLayout.Margin Eigenschaft auf eine plattformspezifische ThicknessEigenschaft festgelegt.

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