x:Diretiva Argumentos
Empacota argumentos de construção para uma declaração de elemento de objeto de construtor sem parâmetros em XAML ou para uma declaração de objeto de método de fábrica.
Uso do elemento XAML (construtor Nonparameterless)
<object ...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
Uso de elemento XAML (método de fábrica)
<object x:FactoryMethod="methodName"...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
Valores XAML
Valor | Descrição |
---|---|
oneOrMoreObjectElements |
Um ou mais elementos de objeto que especificam argumentos a serem passados para o método de fábrica ou construtor não sem parâmetros de suporte. O uso típico é usar texto de inicialização dentro dos elementos de objeto para especificar os valores reais do argumento. Consulte a secção Exemplos. A ordem dos elementos é significativa. Os tipos XAML em ordem devem corresponder aos tipos e à ordem de tipos do construtor de suporte ou da sobrecarga do método de fábrica. |
methodName |
O nome do método de fábrica que deve processar quaisquer argumentos x:Arguments . |
Dependências
x:FactoryMethod
pode modificar o escopo e o comportamento onde x:Arguments
se aplica.
Se nenhum x:FactoryMethod
for especificado, x:Arguments
se aplicará a assinaturas alternativas (não padrão) dos construtores de suporte.
Se x:FactoryMethod
for especificado, x:Arguments
se aplica a uma sobrecarga do método nomeado.
Comentários
O XAML 2006 pode oferecer suporte à inicialização não padrão por meio de texto de inicialização. No entanto, a aplicação prática de uma técnica de construção de texto de inicialização é limitada. O texto de inicialização é tratado como uma única cadeia de caracteres de texto; portanto, ele só adiciona capacidade para uma única inicialização de parâmetro, a menos que um conversor de tipo seja definido para o comportamento de construção que pode analisar itens de informações personalizados e delimitadores personalizados da cadeia de caracteres. Além disso, a cadeia de texto para lógica de objeto é potencialmente um determinado conversor de tipo padrão nativo do analisador XAML para lidar com primitivos diferentes de uma cadeia de caracteres verdadeira.
O uso x:Arguments
XAML não é o uso do elemento de propriedade no sentido típico, porque a marcação de diretiva não faz referência ao tipo do elemento objeto que o contém. É mais semelhante a outras diretivas, como a x:Code
em que o elemento demarca um intervalo no qual a marcação deve ser interpretada como diferente do padrão para conteúdo filho. Nesse caso, o tipo XAML de cada elemento de objeto comunica informações sobre os tipos de argumento, que são usadas por analisadores XAML para determinar qual assinatura de método de fábrica de construtor específico um uso de x:Arguments
está tentando referenciar.
x:Arguments
para um elemento object que está sendo construído deve preceder quaisquer outros elementos de propriedade, conteúdo, texto interno ou cadeias de caracteres de inicialização do elemento object. Os elementos de objeto dentro x:Arguments
podem incluir atributos e cadeias de caracteres de inicialização, conforme permitido por esse tipo XAML e seu construtor de suporte ou método de fábrica. Para o objeto ou os argumentos, você pode especificar tipos XAML personalizados ou tipos XAML que, de outra forma, estariam fora do namespace XAML padrão fazendo referência a mapeamentos de prefixo estabelecidos.
Os processadores XAML usam as diretrizes a seguir para determinar como os argumentos especificados em x:Arguments
devem ser usados para construir um objeto. Se x:FactoryMethod
for especificado, as informações serão comparadas com o x:FactoryMethod
especificado (observe que o valor de x:FactoryMethod
é o nome do método e o método nomeado pode ter sobrecargas. Se x:FactoryMethod
não for especificado, as informações serão comparadas com o conjunto de todas as sobrecargas de construtor público do objeto. Em seguida, a lógica de processamento XAML compara o número de parâmetros e seleciona a sobrecarga com a aridade correspondente. Se houver mais de uma correspondência, o processador XAML deve comparar os tipos dos parâmetros com base nos tipos XAML dos elementos de objeto fornecidos. Se ainda houver mais de uma correspondência, o comportamento do processador XAML será indefinido. Se um x:FactoryMethod
for especificado, mas o método não puder ser resolvido, um processador XAML deverá lançar uma exceção.
Um <x:Arguments>string</x:Arguments>
de uso de atributo XAML é tecnicamente possível. No entanto, isso não fornece recursos além do que poderia ser feito de outra forma por meio de conversores de texto e tipo de inicialização, e usar essa sintaxe não é a intenção de design dos recursos do método de fábrica XAML 2009.
Exemplos
O exemplo a seguir mostra uma assinatura de construtor não sem parâmetros e, em seguida, o uso XAML de x:Arguments
que acessa essa assinatura.
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>
O exemplo a seguir mostra uma assinatura de método de fábrica de destino e, em seguida, o uso XAML de x:Arguments
que acessa essa assinatura.
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>
Ver também
.NET Desktop feedback