Sdílet prostřednictvím


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 změnit obor a chování, kde x:Arguments platí.

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

Pokud je zadán x:FactoryMethod, x:Arguments se vztahuje na 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.

x:Arguments použití 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 je x:Code, kde prvek označuje rozsah, ve kterém má 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 metody konstruktoru, který se x:Arguments použití pokouší odkazovat.

x:Arguments pro vytvořený prvek objektu musí předcházet jiným prvkům vlastnosti, obsahu, vnitřnímu textu nebo inicializačním řetězcům elementu objektu. Prvky 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 v x:Arguments k vytvoření objektu. Pokud je zadán x:FactoryMethod, 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 zadaná x:FactoryMethod, ale metodu nelze přeložit, procesor XAML by měl vyvolat výjimku.

Využití atributů XAML <x:Arguments>string</x:Arguments> 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í XAML x:Arguments, který přistupuje k tomuto 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í XAML x:Arguments, která přistupuje 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é