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ż
.NET Desktop feedback