x:TypeArguments (Directiva)

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

Uso de atributos XAML

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

Valores XAML

Value Descripción
object Una 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 pertenece al espacio de nombres XAML predeterminado, object requiere un prefijo para indicar el espacio de nombres XAML donde existe object.
typeString Una cadena que declara uno o varios nombres de tipo XAML como cadenas, que proporciona los argumentos de tipo para el tipo genérico CLR. Para obtener notas de sintaxis adicionales, consulte Comentarios.

Comentarios

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

Se puede especificar más de un nombre de tipo XAML mediante delimitación con comas.

Si las restricciones genéricas mismas usan tipos genéricos, los argumentos de tipo de restricción anidados 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 la sección 7.3.11 de [MS-XAML].

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"

Lista<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 una nueva Queue<T> que tiene una restricción de KeyValuePair<TKey,TValue> con los argumentos de tipo de restricción interna String y String.

Usos XAML genéricos de XAML 2006 y WPF

Para el uso de XAML 2006 y XAML que se usa para las aplicaciones WPF, existen las restricciones siguientes para x:TypeArguments y para los usos de tipos genéricos 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 en el uso XAML genérico son relajadas. Se puede crear una instancia de un elemento de objeto genérico en cualquier posición del marcado XAML que el sistema de tipos de respaldo y el modelo de objetos puedan admitir.

Si usa XAML 2009 en lugar de asignar los tipos base CLR para obtener tipos XAML para primitivos de lenguaje común, puede usar tipos integrados para primitivos comunes de lenguaje XAML como elementos de información de typeString. Por ejemplo, puede declarar lo siguiente (las asignaciones de prefijo no se muestran, 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 cuando el destino es .NET Framework 4 o .NET Core 3.0 (o posterior), se pueden usar características de XAML 2009 junto con x:TypeArguments, pero solo para XAML dinámico (XAML que no está compilado con marcado). XAML compilado por marcado para WPF y el formulario BAML de XAML no admiten de momento las palabras clave y características de XAML 2009. Si necesita compilar por marcado el XAML, debe operar con las restricciones indicadas en la sección Usos XAML genéricos de XAML 2006 y WPF. BAML solo se admite en .NET Framework.

Vea también