Compartir a través de


Convertidores de tipos y extensiones de marcado para XAML

Los convertidores de tipos y las extensiones de marcado son dos técnicas que usan los sistemas de tipos XAML y los escritores XAML para generar componentes de grafos de objetos. Aunque comparten algunas características, los convertidores de tipos y las extensiones de marcado se representan de forma diferente en un flujo de nodo XAML. En este conjunto de documentación, los convertidores de tipos, las extensiones de marcado y las construcciones similares a veces se conocen colectivamente como convertidores de valores.

Convertidores de valores

En XAML, los convertidores de valores se usan para varios escenarios. En la lista siguiente se muestran los distintos tipos de convertidores de valores en XAML:

  • Convertidor de tipos

  • Extensión de marcado

  • Serializador de valor

  • Clase relacionada o clase de compatibilidad que proporciona la lógica de una sintaxis de texto XAML

Convertidores de tipos

En la definición de servicios XAML de .NET, los convertidores de tipos son clases que derivan de la clase CLR TypeConverter. TypeConverter es una clase que estaba en .NET antes de que existiera XAML. Su propósito original era admitir ventanas de propiedades y metáforas de edición similares basadas en texto para las propiedades del IDE. La introducción de XAML a .NET usa TypeConverter para convertir una sintaxis de texto (como se encuentra en un valor de atributo o un nodo de valor XAML) en un objeto . TypeConverter también se puede usar para serializar un valor de objeto en la sintaxis de texto. TypeConverter también se usó en implementaciones XAML específicas del marco anterior en Windows Presentation Foundation (WPF) y Windows Communication Foundation (WCF). Para obtener más información sobre el TypeConverter en XAML, consulta Convertidores de tipos para xaml.

Extensiones de marcado

En la implementación de servicios XAML de .NET, las extensiones de marcado son clases que derivan de la clase MarkupExtension. Las extensiones de marcado son un concepto que en este formulario se origina en el lenguaje XAML. Puede pensar en una extensión de marcado como algo parecido a una secuencia de escape extensible que llama a una clase de servicio para proporcionar su lógica. En términos de marcado, los procesadores XAML reconocen universalmente una extensión de marcado por una secuencia de texto que comienza con una llave de apertura ({) en una cadena de texto.

Las extensiones de marcado difieren de los convertidores de tipos. Normalmente, los convertidores de tipos se asocian a tipos o miembros. Se invocan cuando un gráfico de objetos crea o una serialización encuentra sintaxis de texto asociada a esas entidades.

Las extensiones de marcado están asociadas a una sola clase de servicio auxiliar, pero se pueden aplicar para cualquier valor de miembro. (Sin embargo, puede implementar la extensión de marcado para restringir deliberadamente su uso a determinados miembros o tipos de destino, mediante el contexto de servicio). Las extensiones de marcado pueden invalidar una asociación de convertidor de tipos. O bien, puede usarlos para especificar un valor de atributo para los miembros que, de lo contrario, no admitirían una sintaxis de texto.

Para obtener más información sobre el patrón de implementación de la extensión de marcado para XAML, consulta Extensiones de marcado para XAML.

Serializadores de valor

Un ValueSerializer es un convertidor de tipos especializado que está optimizado para convertir un objeto en una cadena. Es posible que un ValueSerializer para XAML no implemente el método ConvertFrom. Una implementación de ValueSerializer obtiene servicios de una manera similar a una implementación de TypeConverter. Los métodos virtuales proporcionan un parámetro context de entrada. El parámetro context es de tipo IValueSerializerContext, que hereda de la interfaz IServiceProvider y tiene un método GetService.

En el sistema de tipos XAML y en las implementaciones del escritor XAML que usan el procesamiento de bucles de nodo XAML para la serialización, se notifica un convertidor de valores asociado a un tipo o miembro por su propia propiedad XamlType.ValueSerializer. El significado de los escritores XAML que realizan la serialización es que si existe un XamlType.TypeConverter y XamlType.ValueSerializer, el convertidor de tipos debe usarse para la ruta de acceso de carga y el serializador de valores debe usarse para la ruta de acceso de guardado. Si XamlType.TypeConverter existe, pero XamlType.ValueSerializer es null, el convertidor de tipos también se usa para la ruta de acceso de guardado.

Otros convertidores de valores

Un convertidor de valores es extensible más allá de los patrones específicos de un convertidor de tipos o una extensión de marcado. Sin embargo, esta personalización también requeriría la redefinición del sistema de tipos XAML, tal como lo proporcionan los servicios XAML de .NET. El sistema de tipos XAML existente tiene representaciones y sistemas de informes para convertidores de tipos, extensiones de marcado y serializadores de valor, pero no para formas personalizadas de conversión de valores. Si desea crear convertidores de valores personalizados, use el tipo XamlValueConverter<TConverterBase>.

Convertidores de tipos y extensiones de marcado en combinación

Las extensiones de marcado y los convertidores de tipos se usan para diferentes situaciones en XAML. Aunque el contexto está disponible para los usos de extensiones de marcado, el comportamiento de conversión de tipos de propiedades donde una extensión de marcado proporciona un valor generalmente no está protegido en las implementaciones de la extensión de marcado. En otras palabras, incluso si una extensión de marcado devuelve una cadena de texto como su salida de ProvideValue, no se invoca el comportamiento de conversión de tipos en esa cadena tal como se aplica a una propiedad específica o a un tipo de valor de propiedad. Por lo general, el propósito de una extensión de marcado es procesar una cadena y devolver un objeto sin ningún convertidor de tipos implicado.

Contexto de servicio para un convertidor de valores

Al implementar un convertidor de valores, a menudo necesita acceso a un contexto en el que se aplica el convertidor de valores. Este contexto se conoce como contexto de servicio. El contexto de servicio puede incluir información como el contexto de esquema XAML activo, el acceso al sistema de asignación de tipos que proporciona el contexto de esquema XAML y el escritor de objetos XAML, etc. Para obtener más información sobre los contextos de servicio disponibles para un convertidor de valores y cómo acceder a los servicios que puede proporcionar un contexto de servicio, consulte Contextos de servicio disponibles para convertidores de tipos y extensiones de marcado.

Consulte también