x:Arguments-Anweisung

Pakete von Konstruktionsargumenten für eine nicht parameterlose Konstruktorobjektelementdeklaration in XAML oder für eine Factory-Methode-Objektdeklaration.

XAML-Elementverwendung (Nichtparameterless-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 Ein oder mehrere Objektelemente, die Argumente angeben, die an den nicht parameterlosen Konstruktor oder die Fabrikmethode übergeben werden sollen.

Die typische Verwendung besteht darin, den Initialisierungstext innerhalb der Objektelemente zu verwenden, um die tatsächlichen Argumentwerte anzugeben. Siehe Abschnitt Beispiele.

Die Reihenfolge der Elemente ist von Bedeutung. Die XAML-Typen müssen den Typen und der Typreihenfolge des Backing-Konstruktors oder der Fabrikmethodeüberladung entsprechen.
methodName Der Name der Factorymethode, die alle x:Arguments-Argumente verarbeiten soll.

Abhängigkeiten

x:FactoryMethod kann den Bereich und das Verhalten ändern, bei dem x:Arguments gilt.

Wenn keine x:FactoryMethod angegeben ist, gilt x:Arguments für alternative (nicht standardmäßige) Signaturen der Backingkonstruktoren.

Wenn x:FactoryMethod angegeben ist, gilt x:Arguments für eine Überladung der benannten Methode.

Hinweise

XAML 2006 kann die nicht standardmäßige Initialisierung durch 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 Parameter initialisierung hinzugefügt, es sei denn, ein Typkonverter wird für das Konstruktionsverhalten definiert, das benutzerdefinierte Informationselemente und benutzerdefinierte Trennzeichen aus der Zeichenfolge analysiert. Außerdem ist die Textzeichenfolge für Objektlogik möglicherweise ein systemeigener Standardtypkonverter des XAML-Parsers für die Behandlung von Grundtypen als einer true Zeichenfolge.

Die x:Arguments XAML-Verwendung ist keine Eigenschaftselementverwendung im typischen Sinne, da das Direktive-Markup nicht auf den Typ des enthaltenden Objektelements verweist. Es ist eher mit anderen Richtlinien vergleichbar, z. B. x:Code, wenn das Element einen Bereich kennzeichnet, in dem das Markup als andere als die Standardeinstellung 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 ermitteln, welche spezifische Konstruktor-Factorymethodesignatur eine x:Arguments-Verwendung referenziert.

x:Arguments für ein Objektelement, das erstellt wird, muss jedem anderen Eigenschaftselement, Inhalt, inneren Text oder Initialisierungszeichenfolgen des Objektelements vorangestellt werden. Die Objektelemente innerhalb von x:Arguments können Attribute und Initialisierungszeichenfolgen enthalten, wie von diesem XAML-Typ und dessen Backing-Konstruktor oder Factorymethode zulässig. Für das Objekt oder die Argumente können Sie benutzerdefinierte XAML-Typen oder XAML-Typen angeben, die andernfalls außerhalb des Standard-XAML-Namespace liegen, indem Sie etablierte Präfixzuordnungen verweisen.

XAML-Prozessoren verwenden die folgenden Richtlinien, um zu bestimmen, wie die in angegebenen x:Arguments-Argumente zum Erstellen eines Objekts verwendet werden sollen. Wenn x:FactoryMethod angegeben ist, werden Informationen mit dem angegebenen x:FactoryMethod verglichen (beachten Sie, dass der Wert von x:FactoryMethod der Methodenname ist, und die benannte Methode kann Überladungen aufweisen. Wenn x:FactoryMethod nicht angegeben ist, werden 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 übereinstimmenden Arität aus. Wenn mehr als eine Übereinstimmung vorhanden ist, sollte der XAML-Prozessor die Typen der Parameter basierend auf den XAML-Typen der bereitgestellten Objektelemente vergleichen. Wenn immer noch mehrere Übereinstimmungen vorhanden sind, wird das XAML-Prozessorverhalten nicht definiert. Wenn eine x:FactoryMethod angegeben ist, aber die Methode 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 außer dem, was andernfalls durch Initialisierungstext- und Typkonverter durchgeführt werden könnte, und die Verwendung dieser Syntax ist nicht die Entwurfsabsicht der XAML 2009-Fabrikmethodenfeatures.

Beispiele

Das folgende Beispiel zeigt eine nicht parameterlose Konstruktorsignatur, und dann die XAML-Verwendung von x:Arguments dieser Signatur.

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>

Im folgenden Beispiel wird eine Ziel-Factory-Methodesignatur angezeigt, und dann die XAML-Verwendung von x:Arguments dieser Signatur.

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>

Weitere Informationen