Übergeben von Argumenten in XAML

Beispiel herunterladen Das Beispiel herunterladen

In diesem Artikel wird die Verwendung der XAML-Attribute veranschaulicht, die verwendet werden können, um Argumente an nicht standardmäßige Konstruktoren zu übergeben, Factorymethoden aufzurufen und den Typ eines generischen Arguments anzugeben.

Übersicht

Es ist häufig erforderlich, Objekte mit Konstruktoren zu instanziieren, die Argumente erfordern, oder durch Aufrufen einer statischen Erstellungsmethode. Dies kann in XAML mithilfe der x:Arguments Attribute und x:FactoryMethod erreicht werden:

  • Das x:Arguments -Attribut wird verwendet, um Konstruktorargumente für einen nicht standardmäßigen Konstruktor oder für eine Factorymethodenobjektdeklaration 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 Factorymethoden.

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 innerhalb des x:Arguments Tags 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 im Bereich von 0 bis 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, angegeben mit x:Arguments

Aufrufen von Factorymethoden

Factorymethoden können in XAML aufgerufen werden, indem der Name der Methode mit dem -Attribut und deren x:FactoryMethod Argumente mithilfe des x:Arguments -Attributs angegeben werden. Eine Factorymethode 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 aufgerufenen Factorymethode übereinstimmen. Die FromRgba Factorymethode erfordert vier Int32 Parameter, die die Werte rot, grün, blau und alpha darstellen und von 0 bis 255 reichen. Die FromHsla Factorymethode erfordert vier Double Parameter, die die Werte für Farbton, Sättigung, Leuchtkraft und Alpha darstellen und von 0 bis 1 reichen. Die FromHex Factorymethode erfordert eine String , die die hexadezimale (A)RGB-Farbe darstellt.

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

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

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

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