Udostępnij za pośrednictwem


x:Arguments — dyrektywa

Tworzy argumenty dla deklaracji obiektu konstruktora bez parametrów w języku XAML lub deklaracji obiektu metody fabryki.

Użycie elementu XAML (konstruktor bezparametrowy)

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

Użycie elementu XAML (metoda factory)

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

Wartości XAML

Wartość Opis
oneOrMoreObjectElements Co najmniej jeden element obiektu, który określa argumenty, które mają być przekazywane do zapasowego konstruktora bez parametrów lub metody fabryki.

Typowym użyciem jest użycie tekstu inicjowania w elementach obiektu w celu określenia rzeczywistych wartości argumentów. Zobacz sekcję Przykłady.

Kolejność elementów jest znacząca. Typy XAML w kolejności muszą być zgodne z typami i kolejnością przeciążenia konstruktora kopii zapasowej lub metody fabryki.
methodName Nazwa metody fabryki, która powinna przetwarzać wszelkie x:Arguments argumenty.

Zależności

x:FactoryMethod program może modyfikować zakres i zachowanie, w których x:Arguments ma zastosowanie.

Jeśli nie x:FactoryMethod zostanie określony, x:Arguments ma zastosowanie do alternatywnych (innych niż domyślne) podpisów konstruktorów kopii zapasowych.

Jeśli x:FactoryMethod zostanie określony, x:Arguments ma zastosowanie do przeciążenia nazwanej metody.

Uwagi

Język XAML 2006 może obsługiwać inicjowanie inne niż domyślne za pomocą tekstu inicjowania. Jednak praktyczne zastosowanie techniki inicjalizacji tekstu jest ograniczone. Tekst inicjowania jest traktowany jako pojedynczy ciąg tekstowy; W związku z tym dodaje tylko możliwość inicjowania pojedynczego parametru, chyba że konwerter typów jest zdefiniowany dla zachowania konstrukcji, który może analizować niestandardowe elementy informacji i ograniczniki niestandardowe z ciągu. Ponadto ciąg tekstowy do logiki obiektu jest potencjalnie danym natywnym konwerterem typów analizatora XAML do obsługi typów pierwotnych innych niż prawdziwy ciąg.

Użycie x:Arguments XAML nie jest użyciem elementu właściwości w typowym sensie, ponieważ znacznik dyrektywy nie odwołuje się do typu elementu zawierającego obiekt. Jest bardziej podobne do innych dyrektyw, takich jak x:Code gdzie element demarkuje zakres, w którym znaczniki powinny być interpretowane jako inne niż domyślne dla zawartości podrzędnej. W tym przypadku typ XAML każdego elementu obiektu komunikuje informacje o typach argumentów, które są używane przez analizatory XAML do określenia, który konkretny podpis x:Arguments metody fabryki konstruktora próbuje odwołać się do użycia.

x:Arguments dla tworzonego elementu obiektu musi poprzedzać wszelkie inne elementy właściwości, zawartość, tekst wewnętrzny lub ciągi inicjowania elementu obiektu. Elementy obiektu w programie x:Arguments mogą zawierać atrybuty i ciągi inicjowania, zgodnie z zezwoleniem tego typu XAML i jego konstruktora zapasowego lub metody fabryki. W przypadku obiektu lub argumentów można określić niestandardowe typy XAML lub typy XAML, które w przeciwnym razie znajdują się poza domyślną przestrzenią nazw XAML, odwołując się do ustanowionych mapowań prefiksów.

Procesory XAML używają poniższych wskazówek, aby określić, w jaki sposób argumenty określone w x:Arguments elemecie powinny być używane do konstruowania obiektu. Jeśli x:FactoryMethod zostanie określony, informacje są porównywane z określoną x:FactoryMethod wartością (należy pamiętać, że wartość x:FactoryMethod jest nazwą metody, a nazwana metoda może mieć przeciążenia. Jeśli x:FactoryMethod nie zostanie określony, informacje są porównywane z zestawem wszystkich przeciążeń konstruktora publicznego obiektu. Następnie logika przetwarzania XAML porównuje liczbę parametrów i wybiera przeciążenie z pasującą wartością arity. Jeśli istnieje więcej niż jedno dopasowanie, procesor XAML powinien porównać typy parametrów na podstawie typów XAML podanych elementów obiektu. Jeśli nadal istnieje więcej niż jedno dopasowanie, zachowanie procesora XAML jest niezdefiniowane. x:FactoryMethod Jeśli parametr jest określony, ale nie można rozpoznać metody, procesor XAML powinien zgłosić wyjątek.

Użycie <x:Arguments>string</x:Arguments> atrybutów XAML jest technicznie możliwe. Jednak nie zapewnia to możliwości poza tym, co można zrobić w przeciwnym razie poprzez inicjatory tekstu i typów, a użycie tej składni nie jest intencją projektową funkcji metody fabrycznej XAML 2009.

Przykłady

W poniższym przykładzie przedstawiono podpis konstruktora bez parametrów, a następnie użycie x:Arguments kodu XAML, które uzyskuje dostęp do tego 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>

W poniższym przykładzie przedstawiono sygnaturę metody fabryki docelowej, a następnie użycie x:Arguments kodu XAML, które uzyskuje dostęp do tego 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>

Zobacz też