Übergeben von Argumenten in XAML
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 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 im Bereich von 0 bis 1. Der Color
Konstruktor 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:
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:
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 Thickness
festgelegt.
Weitere Informationen zu generischen Typargumenten finden Sie unter Generics in Xamarin.Forms XAML.