x:Argument-direktiv
Paketkonstruktionsargument för en icke-parameterlös konstruktorobjektdeklaration i XAML eller för en fabriksmetodobjektdeklaration.
XAML-elementanvändning (icke-parameterlös konstruktor)
<object ...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
XAML-elementanvändning (fabriksmetod)
<object x:FactoryMethod="methodName"...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
XAML-värden
Värde | Beskrivning |
---|---|
oneOrMoreObjectElements |
Ett eller flera objektelement som anger argument som ska skickas till den icke-parameterlösa konstruktorn eller fabriksmetoden. Typisk användning är att använda initieringstext i objektelementen för att ange de faktiska argumentvärdena. Se avsnittet Exempel. Ordningen på elementen är betydande. XAML-typerna i ordning måste matcha typerna och typordningen för säkerhetskopieringskonstruktorn eller fabriksmetodens överbelastning. |
methodName |
Namnet på den fabriksmetod som ska bearbeta alla x:Arguments argument. |
Beroenden
x:FactoryMethod
kan ändra omfånget och beteendet där x:Arguments
gäller.
Om ingen x:FactoryMethod
anges gäller x:Arguments
alternativa signaturer (icke-standard) för stödkonstruktorerna.
Om x:FactoryMethod
anges gäller x:Arguments
för en överlagring av den namngivna metoden.
Anmärkningar
XAML 2006 kan stödja initiering som inte är standard via initieringstext. Den praktiska tillämpningen av en initieringstextkonstruktionsteknik är dock begränsad. Initieringstexten behandlas som en enskild textsträng. Därför lägger den bara till funktioner för en initiering av en enskild parameter såvida inte en typkonverterare har definierats för konstruktionsbeteendet som kan parsa anpassade informationsobjekt och anpassade avgränsare från strängen. Dessutom är textsträngen till objektlogik potentiellt en given XAML-parsares interna standardtypkonverterare för hantering av primitiver som inte är en sann sträng.
Den x:Arguments
XAML-användningen är inte användning av egenskapselement i typisk mening, eftersom direktivmarkeringen inte refererar till elementtypen som innehåller objektet. Det liknar mer andra direktiv, till exempel x:Code
där elementet avmarkerar ett intervall där markering ska tolkas som annat än standardvärdet för underordnat innehåll. I det här fallet kommunicerar XAML-typen för varje objektelement information om argumenttyperna, som används av XAML-parsare för att avgöra vilken specifik konstruktorfabriksmetodsignatur som en x:Arguments
användning försöker referera till.
x:Arguments
för ett objektelement som skapas måste föregå andra egenskapselement, innehåll, inre text eller initieringssträngar för objektelementet. Objektelementen i x:Arguments
kan innehålla attribut och initieringssträngar, vilket tillåts av den XAML-typen och dess backkonstruktor eller fabriksmetod. För antingen objektet eller argumenten kan du ange anpassade XAML-typer eller XAML-typer som annars ligger utanför XAML-standardnamnområdet genom att referera till etablerade prefixmappningar.
XAML-processorer använder följande riktlinjer för att avgöra hur argumenten som anges i x:Arguments
ska användas för att konstruera ett objekt. Om x:FactoryMethod
anges jämförs informationen med den angivna x:FactoryMethod
(observera att värdet för x:FactoryMethod
är metodnamnet och att den namngivna metoden kan ha överlagringar. Om x:FactoryMethod
inte anges jämförs informationen med uppsättningen med alla offentliga konstruktoröverlagringar av objektet. XAML-bearbetningslogik jämför sedan antalet parametrar och väljer överlagringen med matchande aritet. Om det finns fler än en matchning bör XAML-processorn jämföra typerna av parametrar baserat på XAML-typerna för de angivna objektelementen. Om det fortfarande finns fler än en matchning är XAML-processorbeteendet odefinierat. Om en x:FactoryMethod
anges men metoden inte kan matchas bör en XAML-processor utlösa ett undantag.
En XAML-attributanvändning <x:Arguments>string</x:Arguments>
är tekniskt möjligt. Detta ger dock inga funktioner utöver vad som annars skulle kunna göras via initieringstext och typkonverterare, och att använda den här syntaxen är inte design avsikten med XAML 2009-fabriksmetodens funktioner.
Exempel
I följande exempel visas en icke-parameterlös konstruktorsignatur och sedan XAML-användningen av x:Arguments
som kommer åt signaturen.
public class Food {
private string _name;
private Int32 _calories;
public Food(string name, Int32 calories) {
_name=name;
_calories=calories;
}
}
<my:Food>
<x:Arguments>
<x:String>Apple</x:String>
<x:Int32>150</x:Int32>
</x:Arguments>
</my:Food>
I följande exempel visas en målfabriksmetodsignatur och sedan XAML-användningen av x:Arguments
som kommer åt signaturen.
public Food TryLookupFood(string name)
{
switch (name) {
case "Apple": return new Food("Apple",150);
case "Chocolate": return new Food("Chocolate",200);
case "Cheese": return new Food("Cheese", 450);
default: {return new Food(name,0);
}
}
<my:Food x:FactoryMethod="TryLookupFood">
<x:Arguments>
<x:String>Apple</x:String>
</x:Arguments>
</my:Food>
Se även
.NET Desktop feedback