Compartir a través de


x:Arguments (Directiva)

Empaqueta argumentos de construcción para una declaración de elemento de objeto de constructor no sin parámetros en XAML o para una declaración de objeto de método de generador.

Uso de elementos XAML (constructor no sin parámetros)

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

Uso de elementos XAML (método de generador)

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

Valores XAML

Value Descripción
oneOrMoreObjectElements Uno o varios elementos de objeto que especifican argumentos que se van a pasar al constructor o al método de generador de respaldo no sin parámetros.

El uso típico es usar texto de inicialización dentro de los elementos de objeto para especificar los valores de argumento reales. Vea la sección Ejemplos.

El orden de los elementos es significativo. Los tipos XAML en orden deben coincidir con los tipos y el orden de tipo del constructor de respaldo o la sobrecarga del método de generador.
methodName El nombre del método de generador que debe procesar los argumentos x:Arguments.

Dependencias

x:FactoryMethod puede modificar el ámbito y el comportamiento donde se aplica x:Arguments.

Si no se especifica x:FactoryMethod, x:Arguments se aplica a firmas alternativas (no predeterminadas) de los constructores de respaldo.

Si x:FactoryMethod se especifica, x:Arguments se aplica a una sobrecarga del método con nombre.

Comentarios

XAML 2006 puede admitir la inicialización no predeterminada a través del texto de inicialización. Sin embargo, la aplicación práctica de una técnica de construcción de texto de inicialización es limitada. El texto de inicialización se trata como una sola cadena de texto; por lo tanto, solo agrega funcionalidad para una inicialización de parámetro único a menos que se defina un convertidor de tipos para el comportamiento de construcción que puede analizar elementos de información personalizados y delimitadores personalizados de la cadena. Además, la cadena de texto a la lógica de objetos es, potencialmente, un convertidor de tipos predeterminado nativo del analizador XAML para controlar primitivos distintos de una cadena verdadera.

El uso del x:Arguments XAML no es el uso de elementos de propiedad en el sentido típico, porque el marcado de directiva no hace referencia al tipo del elemento de objeto contenedor. Es más similar a otras directivas, como x:Code, donde el elemento marca un intervalo en el que el marcado debe interpretarse como distinto del predeterminado para el contenido secundario. En este caso, el tipo XAML de cada elemento de objeto comunica información sobre los tipos de argumento, que usan los analizadores XAML para determinar a qué firma de método de generador de constructores específica está intentando hacer referencia un uso de x:Arguments.

x:Arguments para un elemento de objeto que se está construyendo debe preceder a cualquier otro elemento de propiedad, contenido, texto interno o cadenas de inicialización del elemento de objeto. Los elementos de objeto de x:Arguments pueden incluir atributos y cadenas de inicialización según lo permitido por ese tipo XAML y su constructor de respaldo o método de generador. Para el objeto o los argumentos, puede especificar tipos XAML personalizados o tipos XAML que, de lo contrario, están fuera del espacio de nombres XAML predeterminado haciendo referencia a asignaciones de prefijo establecidas.

Los procesadores XAML usan las instrucciones siguientes para determinar cómo se deben usar los argumentos especificados en x:Arguments para construir un objeto. Si x:FactoryMethod se especifica, la información se compara con el x:FactoryMethod especificado (tenga en cuenta que el valor de x:FactoryMethod es el nombre del método y el método con nombre puede tener sobrecargas. Si x:FactoryMethod no se especifica, la información se compara con el conjunto de todas las sobrecargas de constructor público del objeto. A continuación, la lógica de procesamiento XAML compara el número de parámetros y selecciona la sobrecarga con aridad coincidente. Si hay más de una coincidencia, el procesador XAML debe comparar los tipos de los parámetros en función de los tipos XAML de los elementos de objeto proporcionados. Si todavía hay más de una coincidencia, el comportamiento del procesador XAML no está definido. Si se especifica un x:FactoryMethod pero no se puede resolver el método, un procesador XAML debe generar una excepción.

Técnicamente es posible usar un atributo XAML <x:Arguments>string</x:Arguments>. Sin embargo, esto no proporciona funcionalidades más allá de lo que se podría hacer de otro modo a través de convertidores de tipos y texto de inicialización, y el uso de esta sintaxis no es la intención de diseño de las características del método de generador XAML 2009.

Ejemplos

En el ejemplo siguiente se muestra una firma de constructor no sin parámetros y, a continuación, el uso XAML de x:Arguments que tiene acceso a esa firma.

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>

En el ejemplo siguiente se muestra una firma de método de generador de destino y, a continuación, el uso XAML de x:Arguments que tiene acceso a esa firma.

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>

Vea también