x:Arguments (Directiva)
Empaqueta argumentos de construcción para una declaración de elemento de objeto de constructor sin parámetros en XAML o para una declaración de objeto de método de fábrica.
Uso de elementos XAML (constructor sin parámetros)
<object ...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
Uso de elementos XAML (método factory)
<object x:FactoryMethod="methodName"...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
Valores XAML
Valor | Descripción |
---|---|
oneOrMoreObjectElements |
Uno o varios elementos de objeto que especifican argumentos que se van a pasar al constructor o al método factory sin parámetros de respaldo. El uso típico es usar texto de inicialización dentro de los elementos del objeto para especificar los valores de argumento reales. Consulte 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 fábrica. |
methodName |
Nombre del método de fábrica que debe procesar los argumentos de x:Arguments . |
Dependencias
x:FactoryMethod
puede modificar el ámbito y el comportamiento donde se aplica x:Arguments
.
Si no se especifica ningún x:FactoryMethod
, x:Arguments
se aplica a firmas alternativas (no predeterminadas) de los constructores de respaldo.
Si se especifica x:FactoryMethod
, x:Arguments
se aplica a una sobrecarga del método con nombre.
Observaciones
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 determinado para controlar primitivos distintos de una cadena verdadera.
El x:Arguments
uso de XAML no es el uso de elementos de propiedad en el sentido típico, ya que 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 específica del método de fábrica de constructores un uso de x:Arguments
está intentando hacer referencia.
x:Arguments
para un elemento de objeto que se va a construir debe preceder a cualquier otro elemento de propiedad, contenido, texto interno o cadenas de inicialización del elemento de objeto. Los elementos de objeto dentro 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 fábrica. Para el objeto o los argumentos, puedes 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 se especifica x:FactoryMethod
, 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 no se especifica x:FactoryMethod
, 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 producir una excepción.
Técnicamente es posible usar un atributo XAML <x:Arguments>string</x:Arguments>
. Sin embargo, esto no proporciona ninguna funcionalidad más allá de lo que podría hacerse de otra manera 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 fábrica xaml 2009.
Ejemplos
En el ejemplo siguiente se muestra una firma de constructor sin parámetros y, a continuación, el uso xaml de x:Arguments
que accede 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 fábrica de destino y, a continuación, el uso xaml de x:Arguments
que accede 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>
Consulte también
- definir tipos personalizados para su uso con servicios XAML de .NET
- información general de XAML de (WPF .NET)
.NET Desktop feedback