x:Arguments – direktiva

Packages construction arguments for a non-parameterless constructor object element declaration in XAML, or for a factory method object deklarace.

Použití elementu XAML (neparametrový konstruktor)

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

Použití elementu XAML (metoda továrny)

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

Hodnoty XAML

Hodnota Popis
oneOrMoreObjectElements Jeden nebo více elementů objektu, které určují argumenty, které mají být předány backing non-parameterless konstruktor nebo objektová metoda.

Typickým použitím je použití inicializačního textu v elementech objektu k určení hodnot skutečných argumentů. Viz část Příklady.

Pořadí prvků je významné. Typy XAML v pořadí musí odpovídat typům a pořadí typů záložního konstruktoru nebo přetížení metody továrny.
methodName Název metody továrny, která by měla zpracovat všechny x:Arguments argumenty.

Závislosti

x:FactoryMethod může upravit obor a chování, kde x:Arguments se používá.

Pokud není zadán žádný x:FactoryMethod , x:Arguments platí pro alternativní (ne-výchozí) podpisy záložních konstruktorů.

Pokud x:FactoryMethod je zadáno, x:Arguments platí pro přetížení pojmenované metody.

Poznámky

XAML 2006 může podporovat ne defaultní inicializaci prostřednictvím inicializačního textu. Praktické použití techniky inicializace textu je však omezené. Inicializační text je považován za jeden textový řetězec; proto přidává pouze schopnost pro inicializaci jednoho parametru, pokud není definován převaděč typů pro chování konstrukce, které může analyzovat vlastní položky informací a vlastní oddělovače z řetězce. Textový řetězec logiky objektu je také potenciálně nativním převaděčem výchozího typu analyzátoru XAML pro zpracování primitiv, než je řetězec true.

Použití x:Arguments XAML není použití elementu vlastnosti v typickém smyslu, protože kód direktivy neodkazuje na typ objektu objektu. Je více než jiné direktivy, jako x:Code je například, když prvek označuje rozsah, ve kterém by měl být kód interpretován jako jiný než výchozí pro podřízený obsah. V tomto případě typ XAML každého elementu objektu komunikuje informace o typech argumentů, které používají analyzátory XAML k určení konkrétního podpisu x:Arguments metody konstruktoru objektu, na který se pokouší odkazovat.

x:Arguments pro objekt prvek, který je vytvořen, musí předcházet všechny ostatní prvky vlastnosti, obsah, vnitřní text nebo inicializační řetězce objektu elementu. Elementy objektu v rámci x:Arguments mohou zahrnovat atributy a inicializační řetězce, jak je povoleno tímto typem XAML a jeho backing konstruktorem nebo metodou továrny. U objektu nebo argumentů můžete zadat vlastní typy XAML nebo typy XAML, které jsou jinak mimo výchozí obor názvů XAML odkazováním na vytvořená mapování předpon.

Procesory XAML používají následující pokyny k určení způsobu použití argumentů zadaných x:Arguments k vytvoření objektu. Pokud x:FactoryMethod je zadáno, informace jsou porovnány se zadaným x:FactoryMethod (všimněte si, že hodnota x:FactoryMethod je název metody a pojmenovaná metoda může mít přetížení. Pokud x:FactoryMethod není zadán, informace jsou porovnány se sadou všech veřejných konstruktor přetížení objektu. Logika zpracování XAML pak porovná počet parametrů a vybere přetížení s odpovídajícími arity. Pokud existuje více než jedna shoda, měl by procesor XAML porovnat typy parametrů na základě typů XAML zadaných elementů objektu. Pokud existuje stále více než jedna shoda, chování procesoru XAML není definováno. Pokud je zadán, x:FactoryMethod ale metoda nelze přeložit, procesor XAML by měl vyvolat výjimku.

Použití <x:Arguments>string</x:Arguments> atributu XAML je technicky možné. To však neposkytuje žádné možnosti nad rámec toho, co by bylo možné provést jinak prostřednictvím inicializace text a převaděče typů, a použití této syntaxe není záměrem návrhu funkcí metody továrny XAML 2009.

Příklady

Následující příklad ukazuje bezparametrový podpis konstruktoru a pak použití x:Arguments XAML tohoto podpisu.

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>

Následující příklad ukazuje podpis metody cílové továrny a pak použití x:Arguments XAML pro přístup k tomuto podpisu.

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>

Viz také