Freigeben über


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