Ü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 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 Color
Konstruktor mit einem einzelnen Parameter erfordert einen Graustufenwert von 0 (Schwarz) bis 1 (Weiß). Der Color
Konstruktor mit drei Parametern erfordert einen roten, grünen und blauen Wert von 0 bis 1. Der Color
Konstruktor 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:
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:
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 Thickness
Eigenschaft festgelegt.
Weitere Informationen zu generischen Typargumenten finden Sie unter Generics in Xamarin.Forms XAML.