Diretiva x:Arguments

Empacota argumentos de construção para uma declaração de elemento de objeto de construtor não sem parâmetro em XAML ou para uma declaração de objeto de método de fábrica.

Uso do elemento XAML (construtor sem parâmetro)

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

Uso do 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 construtor sem parâmetros de suporte ou método de fábrica.

O uso típico é usar o texto de inicialização dentro dos elementos do objeto para especificar os valores reais do argumento. Consulte a seçã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 x:Arguments argumentos.

Dependências

x:FactoryMethod pode modificar o escopo e o comportamento onde x:Arguments se aplica.

Se nenhum x:FactoryMethod for especificado, x:Arguments aplica-se a assinaturas alternativas (não padrão) dos construtores de suporte.

Se x:FactoryMethod for especificado, x:Arguments aplica-se 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 inicialização de parâmetro único, 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 caracteres de texto para lógica de objeto é potencialmente um determinado conversor de tipo padrão nativo do analisador XAML para manipular primitivas diferentes de uma cadeia de caracteres verdadeira.

O x:Arguments uso de 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 de objeto que contém. É mais parecido com outras diretivas, como quando o elemento demarca um intervalo no qual a marcação deve ser interpretada como x:Code 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 pelos analisadores XAML para determinar qual assinatura de método de fábrica de construtor específico um x:Arguments uso está tentando referenciar.

x:Arguments para um elemento de objeto que está sendo construído deve preceder quaisquer outros elementos de propriedade, conteúdo, texto interno ou sequências de inicialização do elemento de objeto. 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, estão 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 especificado x:FactoryMethod (observe que o valor de é o nome do x:FactoryMethod método e o método nomeado pode ter sobrecargas. Se x:FactoryMethod não for especificado, as informações serão comparadas ao 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 deverá 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 for especificado, mas o método não puder ser resolvido, um x:FactoryMethod processador XAML deverá lançar uma exceção.

Um uso de <x:Arguments>string</x:Arguments> 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 texto de inicialização e conversores de tipo, 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 sem parâmetros e, em seguida, o uso XAML dessa x:Arguments assinatura acessa.

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 de x:Arguments XAML 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>

Confira também