x:Arguments-Direktive
Packt Konstruktionsargumente für eine nicht parameterlose Konstruktorobjektelementdeklaration in XAML oder für eine Factory-Methodenobjektdeklaration.
XAML-Elementverwendung (nichtparameterloser Konstruktor)
<object ...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
XAML-Elementverwendung (Factorymethode)
<object x:FactoryMethod="methodName"...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
XAML-Werte
Wert | Beschreibung |
---|---|
oneOrMoreObjectElements |
Mindestens ein Objektelement, das Argumente angibt, die an den zugrunde stehenden nicht parameterlosen Konstruktor oder die Factorymethode übergeben werden sollen. Die typische Verwendung besteht darin, Initialisierungstext innerhalb der Objektelemente zu verwenden, um die tatsächlichen Argumentwerte anzugeben. Siehe Abschnitt "Beispiele". Die Reihenfolge der Elemente ist erheblich. Die XAML-Typen müssen den Typen und der Typreihenfolge des Sicherungskonstruktors oder der Factorymethodenüberladung entsprechen. |
methodName |
Der Name der Factorymethode, die alle x:Arguments Argumente verarbeiten soll. |
Abhängigkeiten
x:FactoryMethod
können den Bereich und das Verhalten ändern, in dem x:Arguments
angewendet wird.
Wenn kein x:FactoryMethod
angegeben ist, gilt x:Arguments
für alternative (nicht standardmäßige) Signaturen der zugrunde stehenden Konstruktoren.
Wenn x:FactoryMethod
angegeben ist, gilt x:Arguments
für eine Überladung der benannten Methode.
Bemerkungen
XAML 2006 kann die nicht standardmäßige Initialisierung über Initialisierungstext unterstützen. Die praktische Anwendung einer Initialisierungstextbautechnik ist jedoch begrenzt. Initialisierungstext wird als einzelne Textzeichenfolge behandelt. Daher wird nur die Funktion für eine einzelne Parameterinitialisierung hinzugefügt, es sei denn, ein Typkonverter ist für das Konstruktionsverhalten definiert, das benutzerdefinierte Informationselemente und benutzerdefinierte Trennzeichen aus der Zeichenfolge analysieren kann. Außerdem ist die Textzeichenfolge für Objektlogik potenziell ein systemeigener Standardtypkonverter des XAML-Parsers für die Behandlung anderer Grundtypen als einer echten Zeichenfolge.
Die x:Arguments
XAML-Verwendung ist keine Eigenschaftselementverwendung im typischen Sinne, da das Direktivenmarkup nicht auf den Typ des enthaltenden Objektelements verweist. Es ähnelt anderen Direktiven wie x:Code
, bei denen das Element einen Bereich demarkiert, in dem das Markup als anderer als der Standard für untergeordnete Inhalte interpretiert werden soll. In diesem Fall kommuniziert der XAML-Typ jedes Objektelements Informationen zu den Argumenttypen, die von XAML-Parsern verwendet werden, um zu bestimmen, auf welche spezifische Konstruktorfactorymethodensignatur eine x:Arguments
Verwendung verweist.
x:Arguments
für ein objektelement, das erstellt wird, muss allen anderen Eigenschaftselementen, Inhalten, inneren Text oder Initialisierungszeichenfolgen des Objektelements vorausgehen. Die Objektelemente in x:Arguments
können Attribute und Initialisierungszeichenfolgen enthalten, wie von diesem XAML-Typ und der zugehörigen Sicherungskonstruktor- oder Factorymethode erlaubt. Für das Objekt oder die Argumente können Sie benutzerdefinierte XAML-Typen oder XAML-Typen angeben, die sich andernfalls außerhalb des Standardmäßigen XAML-Namespace befinden, indem Sie auf festgelegte Präfixzuordnungen verweisen.
XAML-Prozessoren verwenden die folgenden Richtlinien, um zu bestimmen, wie die in x:Arguments
angegebenen Argumente zum Erstellen eines Objekts verwendet werden sollen. Wenn x:FactoryMethod
angegeben wird, werden Die Informationen mit dem angegebenen x:FactoryMethod
verglichen (beachten Sie, dass der Wert von x:FactoryMethod
der Methodenname ist und die benannte Methode Überladungen aufweisen kann. Wenn x:FactoryMethod
nicht angegeben ist, werden Die Informationen mit dem Satz aller öffentlichen Konstruktorüberladungen des Objekts verglichen. Xaml-Verarbeitungslogik vergleicht dann die Anzahl der Parameter und wählt die Überladung mit übereinstimmendem Arität aus. Wenn mehrere Übereinstimmungen vorhanden sind, sollte der XAML-Prozessor die Typen der Parameter basierend auf den XAML-Typen der bereitgestellten Objektelemente vergleichen. Wenn immer noch mehr als eine Übereinstimmung vorhanden ist, ist das XAML-Prozessorverhalten nicht definiert. Wenn ein x:FactoryMethod
angegeben ist, die Methode jedoch nicht aufgelöst werden kann, sollte ein XAML-Prozessor eine Ausnahme auslösen.
Eine XAML-Attributverwendung <x:Arguments>string</x:Arguments>
ist technisch möglich. Dies bietet jedoch keine Funktionen, die nicht über das hinausgehen, was andernfalls durch Initialisierungstext- und Typkonverter geschehen könnte, und die Verwendung dieser Syntax ist nicht die Entwurfsabsicht der Features der XAML 2009-Factorymethode.
Beispiele
Das folgende Beispiel zeigt eine nicht parameterlose Konstruktorsignatur und dann die XAML-Verwendung von x:Arguments
, die auf diese Signatur zugreift.
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>
Das folgende Beispiel zeigt eine Ziel-Factorymethodensignatur und dann die XAML-Verwendung von x:Arguments
, die auf diese Signatur zugreift.
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>
Siehe auch
.NET Desktop feedback