Condividi tramite


Direttiva x:Arguments

Crea pacchetti argomenti di costruzione per una dichiarazione di elemento dell'oggetto costruttore senza parametri in XAML o per una dichiarazione di oggetto metodo factory.

Utilizzo degli elementi XAML (costruttore nonparameterless)

<object ...>
  <x:Arguments>
    oneOrMoreObjectElements
  </x:Arguments>
</object>

Utilizzo degli elementi XAML (metodo factory)

<object x:FactoryMethod="methodName"...>
  <x:Arguments>
    oneOrMoreObjectElements
  </x:Arguments>
</object>

Valori XAML

Valore Descrizione
oneOrMoreObjectElements Uno o più elementi oggetto che specificano gli argomenti da passare al costruttore non senza parametri o al metodo factory.

L'utilizzo tipico consiste nell'usare il testo di inizializzazione all'interno degli elementi dell'oggetto per specificare i valori effettivi dell'argomento. Vedere la sezione Esempi.

L'ordine degli elementi è significativo. I tipi XAML in ordine devono corrispondere ai tipi e all'ordine di tipo del costruttore di supporto o dell'overload del metodo factory.
methodName Nome del metodo factory che deve elaborare qualsiasi argomento x:Arguments.

Dipendenze

x:FactoryMethod possibile modificare l'ambito e il comportamento in cui si applica x:Arguments.

Se non viene specificata alcuna x:FactoryMethod, x:Arguments si applica alle firme alternative (non predefinite) dei costruttori di supporto.

Se viene specificato x:FactoryMethod, x:Arguments si applica a un overload del metodo denominato.

Osservazioni

XAML 2006 può supportare l'inizializzazione non predefinita tramite testo di inizializzazione. Tuttavia, l'applicazione pratica di una tecnica di costruzione del testo di inizializzazione è limitata. Il testo di inizializzazione viene considerato come una singola stringa di testo; pertanto, aggiunge solo la funzionalità per un'inizializzazione di un singolo parametro, a meno che non sia definito un convertitore di tipi per il comportamento di costruzione in grado di analizzare elementi di informazioni personalizzati e delimitatori personalizzati dalla stringa. Inoltre, la stringa di testo per la logica oggetto è potenzialmente un convertitore di tipi predefinito nativo del parser XAML specificato per la gestione di primitive diverse da una stringa vera.

L'utilizzo xaml x:Arguments non è l'utilizzo degli elementi di proprietà nel senso tipico, perché il markup della direttiva non fa riferimento al tipo dell'elemento oggetto contenitore. È più simile ad altre direttive, ad esempio x:Code in cui l'elemento contrassegna un intervallo in cui il markup deve essere interpretato come diverso da quello predefinito per il contenuto figlio. In questo caso, il tipo XAML di ogni elemento oggetto comunica informazioni sui tipi di argomento, usati dai parser XAML per determinare quale specifica firma del metodo factory del costruttore sta tentando di fare riferimento a un utilizzo x:Arguments.

x:Arguments per un elemento oggetto da costruire deve precedere qualsiasi altro elemento di proprietà, contenuto, testo interno o stringhe di inizializzazione dell'elemento oggetto. Gli elementi dell'oggetto all'interno di x:Arguments possono includere attributi e stringhe di inizializzazione, come consentito da tale tipo XAML e dal relativo costruttore di supporto o metodo factory. Per l'oggetto o gli argomenti, puoi specificare tipi XAML personalizzati o tipi XAML che altrimenti non rientrano nello spazio dei nomi XAML predefinito facendo riferimento ai mapping dei prefissi stabiliti.

I processori XAML usano le linee guida seguenti per determinare il modo in cui gli argomenti specificati in x:Arguments devono essere usati per costruire un oggetto. Se si specifica x:FactoryMethod, le informazioni sono confrontate con il x:FactoryMethod specificato( si noti che il valore di x:FactoryMethod è il nome del metodo e il metodo denominato può avere overload. Se x:FactoryMethod non viene specificato, le informazioni vengono confrontate con il set di tutti gli overload del costruttore pubblico dell'oggetto. La logica di elaborazione XAML confronta quindi il numero di parametri e seleziona l'overload con l'arità corrispondente. Se sono presenti più corrispondenze, il processore XAML deve confrontare i tipi dei parametri in base ai tipi XAML degli elementi oggetto forniti. Se sono ancora presenti più corrispondenze, il comportamento del processore XAML non è definito. Se viene specificato un x:FactoryMethod ma il metodo non può essere risolto, un processore XAML deve generare un'eccezione.

Un <x:Arguments>string</x:Arguments> di utilizzo degli attributi XAML è tecnicamente possibile. Tuttavia, questo non offre funzionalità oltre a quanto potrebbe essere fatto altrimenti tramite convertitori di testo e tipi di inizializzazione e l'uso di questa sintassi non è l'intenzione di progettazione delle funzionalità del metodo factory XAML 2009.

Esempi

L'esempio seguente mostra una firma del costruttore senza parametri, quindi l'utilizzo XAML di x:Arguments che accede a tale firma.

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>

L'esempio seguente mostra una firma del metodo factory di destinazione, quindi l'utilizzo XAML di x:Arguments che accede a tale firma.

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>

Vedere anche