Compartir a través de


x:TypeArguments (Directiva)

Pasa argumentos de tipo de restricción de un genérico al constructor del tipo genérico.

Uso de atributos XAML

<object x:TypeArguments="typeString" .../>

Valores XAML

Valor Descripción
object Declaración de elemento de objeto de un tipo XAML, respaldado por un tipo genérico CLR. Si object hace referencia a un tipo XAML que no procede del espacio de nombres XAML predeterminado, object requiere un prefijo para indicar el espacio de nombres XAML donde object existe.
typeString Cadena que declara uno o varios nombres de tipo XAML como cadenas, que proporciona los argumentos de tipo para el tipo genérico CLR. Vea Comentarios para obtener notas de sintaxis adicionales.

Observaciones

En la mayoría de los casos, los tipos XAML que se usan como elemento de información en una cadena de typeString tienen como prefijo. Los tipos típicos de restricciones genéricas clR (por ejemplo, Int32 y String) proceden de bibliotecas de clases base clR. Esas bibliotecas no se asignan a espacios de nombres XAML predeterminados típicos específicos del marco y, por lo tanto, requieren una asignación de prefijo para el uso de XAML.

Puedes especificar más de un nombre de tipo XAML mediante un delimitador de comas.

Si las propias restricciones genéricas usan tipos genéricos, los argumentos del tipo de restricción anidado se pueden contener entre paréntesis ().

Tenga en cuenta que esta definición de x:TypeArguments es específica de los servicios XAML de .NET y el uso de la copia de seguridad clR. Puede encontrar una definición de nivel de lenguaje en [MS-XAML] Sección 7.3.11.

Ejemplos de uso

Para estos ejemplos, supongamos que se declaran las siguientes definiciones de espacio de nombres XAML:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"

Enumerar<cadena>

<scg:List x:TypeArguments="sys:String" ...> crea una instancia de un nuevo List<T> con un argumento de tipo String.

Dictionary<String,String>

<scg:Dictionary x:TypeArguments="sys:String,sys:String" ...> crea una instancia de un nuevo Dictionary<TKey,TValue> con dos argumentos de tipo String.

Queue<KeyValuePair<String,String>>

<scg:Queue x:TypeArguments="scg:KeyValuePair(sys:String,sys:String)" ...> crea una instancia de un nuevo Queue<T> que tiene una restricción de KeyValuePair<TKey,TValue> con los argumentos de tipo de restricción interno String y String.

Usos XAML 2006 y XAML genéricos de WPF

Para el uso de XAML 2006 y XAML que se usa para aplicaciones WPF, existen las restricciones siguientes para los usos de tipos genéricos y x:TypeArguments de XAML en general:

  • Solo el elemento raíz de un archivo XAML puede admitir un uso XAML genérico que haga referencia a un tipo genérico.

  • El elemento raíz debe asignarse a un tipo genérico con al menos un argumento de tipo. Un ejemplo es PageFunction<T>. Las funciones de página son el escenario principal para la compatibilidad con el uso genérico xaml en WPF.

  • El elemento de objeto XAML del elemento raíz para el genérico también debe declarar una clase parcial mediante x:Class. Esto es cierto incluso si se define una acción de compilación de WPF.

  • x:TypeArguments no puede hacer referencia a restricciones genéricas anidadas.

XAML 2009 o XAML 2006 sin dependencia de WPF 3.0 o WPF 3.5

En los servicios XAML de .NET para XAML 2006 o XAML 2009, las restricciones relacionadas con WPF sobre el uso XAML genérico se relajan. Puedes crear instancias de un elemento de objeto genérico en cualquier posición del marcado XAML que pueda admitir el sistema de tipos de respaldo y el modelo de objetos.

Si usas XAML 2009 en lugar de asignar los tipos base CLR para obtener tipos XAML para primitivos de lenguaje común, puedes usar tipos integrados para primitivos de lenguaje XAML comunes como elementos de información de un typeString. Por ejemplo, puedes declarar lo siguiente (no se muestran las asignaciones de prefijos, pero x es el espacio de nombres XAML del lenguaje XAML para XAML 2009):

<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>

En WPF y al tener como destino .NET Framework 4 o .NET Core 3.0 (o posterior), puedes usar características xaml 2009 junto con x:TypeArguments, pero solo para XAML flexible (XAML que no está compilado con marcado). Xaml compilado con marcado para WPF y la forma BAML de XAML no admiten actualmente las palabras clave y características xaml 2009. Si necesitas marcar el código XAML, debes operar con las restricciones indicadas en la sección XAML 2006 y USOs XAML genéricos de WPF. BAML solo se admite en .NET Framework.

Consulte también