Ü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 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 zwischen 0 und 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 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:
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.