Compartir a través de


Elementos genéricos en XAML

Los servicios XAML de .NET, tal y como se implementan en System.Xaml, proporcionan compatibilidad con el uso de tipos CLR genéricos. Esta compatibilidad incluye especificar las restricciones de los genéricos como argumento de tipo y aplicar la restricción llamando al método adecuado Add para casos de colecció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 restricción de tipo del genérico al constructor de respaldo. Para obtener una sintaxis de referencia que pertenece al uso de servicios XAML de .NET de x:TypeArguments, que incluye ejemplos de sintaxis, consulte Directiva x:TypeArguments.

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

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

Reglas y convenciones de sintaxis para genéricos en XAML

En XAML un tipo genérico siempre debe representarse como 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 atributos 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 atributos 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 sustituye los paréntesis por el contenedor de restricciones. Para obtener un ejemplo, consulte Directiva x:TypeArguments.

Características genéricas y XAML 2009

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

Compatibilidad con genéricos en WPF

Para el uso de XAML 2006 cuando se destina específicamente a WPF, x:Class también debe proporcionarse en el mismo elemento que x:TypeArguments, y 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 contenedor que se derive de un tipo genérico pero que reduzca la restricción genérica en su propia definición de clase.

En WPF puede usar las características de XAML 2009 junto con x:TypeArguments, pero solo para XAML dinámico (XAML que no se haya compilado por 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.

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

Vea también