Compartir a través de


Genéricos en XAML

Los servicios XAML de .NET implementados en System.Xaml proporcionan compatibilidad con el uso de tipos CLR genéricos. Esta compatibilidad incluye especificar las restricciones de genéricos como argumento de tipo y aplicar la restricción llamando al método Add adecuado para casos de recopilación genéricos. En este tema se describen los aspectos del uso y la referencia a tipos genéricos en XAML.

x:TypeArguments

x:TypeArguments es una directiva definida por el lenguaje XAML. Cuando se usa como miembro de un tipo XAML respaldado por un tipo genérico, x:TypeArguments pasa argumentos de tipo restringido del genérico al constructor de respaldo. Para obtener una sintaxis de referencia que pertenezca al uso de servicios XAML de .NET de x:TypeArguments, que incluye ejemplos de sintaxis, vea directiva x:TypeArguments.

Dado que x:TypeArguments toma una cadena y tiene respaldo de convertidor de tipos, normalmente se declara en uso XAML como atributo.

En el flujo de nodo XAML, la información declarada por x:TypeArguments se puede obtener de XamlType.TypeArguments en una posición de StartObject en el flujo de nodo. El valor devuelto de XamlType.TypeArguments es una lista de XamlType valores. Determinación de si un tipo XAML representa un tipo genérico se puede realizar llamando a XamlType.IsGeneric.

Reglas y convenciones de sintaxis para genéricos en XAML

En XAML, un tipo genérico siempre debe representarse como un genérico restringido. Un genérico sin restricciones nunca está presente en el sistema de tipos XAML o en una secuencia de nodos XAML y no se puede representar en el marcado XAML. Se puede hacer referencia a un genérico dentro de la sintaxis de atributo XAML para los casos en los que se trata de una restricción de tipo anidado de un genérico al que hace referencia x:TypeArguments, o en los casos en los que x:Type proporciona una referencia de tipo CLR para un tipo genérico. La referencia a genéricos se admite a través de la clase XamlTypeTypeConverter definida por los servicios XAML de .NET.

El formulario de sintaxis de atributo XAML habilitado por XamlTypeTypeConverter modifica la convención de sintaxis típica de MSIL /CLR que usa corchetes angulares para tipos y restricciones de genéricos y, en su lugar, sustituye paréntesis por el contenedor de restricciones. Para obtener un ejemplo, vea directiva x:TypeArguments.

Características genéricas y XAML 2009

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 de XAML 2009 como elementos de información en x:TypeArguments. Por ejemplo, puedes 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"/>

Compatibilidad con genéricos en WPF

Para el uso de XAML 2006 cuando se destina específicamente a WPF, también se debe proporcionar x:Class en el mismo elemento que x:TypeArgumentsy ese elemento debe ser el elemento raíz de un documento XAML. El elemento raíz debe asignarse a un tipo genérico con al menos un argumento de tipo. Un ejemplo es PageFunction<T>.

Las posibles soluciones alternativas para admitir usos genéricos incluyen definir una extensión de marcado personalizada que pueda devolver tipos genéricos o proporcionar una definición de clase de ajuste que derive de un tipo genérico pero aplane la restricción genérica en su propia definición de clase.

En WPF puedes usar características de 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.

Los flujos de trabajo personalizados de Windows Workflow Foundation para .NET Framework 3.5 no admiten el uso xaml genérico.

Consulte también