Convertidores de tipos y extensiones de marcado para XAML

Los convertidores de tipos y extensiones de marcado son dos técnicas que los sistemas de tipos XAML y los escritores de XAML utilizan para generar los componentes del gráfico de objeto. Aunque comparten algunas características, los convertidores de tipos y las extensiones de marcado se representan de manera diferente en un flujo de nodo XAML. En este conjunto de documentación, a veces se hace referencia a los convertidores de tipos, extensiones de marcado y estructuras similares colectivamente como convertidores de valores.

Este tema contiene las secciones siguientes.

  • Convertidores de valores
  • Convertidores de tipos
  • Extensiones de marcado
  • Serializadores de valor
  • Otros convertidores de valor
  • Convertidores de tipos y extensiones de marcado en combinación
  • Contexto de servicio para un convertidor de valores
  • Temas relacionados

Convertidores de valores

En XAML, los convertidores de valores se utilizan para varios escenarios. A continuación se enumeran los diferentes tipos de convertidores de valores en XAML:

  • Convertidor de tipos

  • Extensión de marcado

  • Serializador de valor

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

Convertidores de tipos

En la definición de los Servicios XAML de .NET Framework, los convertidores de tipos son clases que se derivan de la clase TypeConverter de CLR. TypeConverter es una clase que estaba en Microsoft .NET Framework antes de que existiera XAML. Su propósito original consistía en admitir las ventanas de propiedades y las metáforas de edición basadas en texto similares para las propiedades de IDE. La introducción de XAML en .NET Framework utiliza TypeConverter para convertir una sintaxis de texto (tal y como se encuentra en un valor de atributo o un nodo de valores de XAML) en un objeto. TypeConverter también se puede utilizar para serializar un valor de objeto en la sintaxis de texto. TypeConverter también se utilizaba en las implementaciones de XAML específicas del marco anterior en Windows Presentation Foundation (WPF) y Windows Communication Foundation (WCF). Para obtener más información sobre TypeConverter en XAML, vea Información general sobre los convertidores de tipos para XAML.

Extensiones de marcado

En la implementación de los Servicios XAML de .NET Framework, las extensiones de marcado son clases que se derivan de la clase MarkupExtension. Las extensiones de marcado son un concepto que origina el lenguaje XAML en este formato. Una extensión de marcado se puede considerar como algo similar a una secuencia de escape extensible que llama a una clase de servicio para proporcionar su lógica. Por lo que se refiere al marcado, los procesadores de XAML reconocen universalmente una extensión de marcado mediante una secuencia de texto que se inicia con una llave de apertura ({) en una cadena de texto.

Las extensiones de marcado difieren de los convertidores de tipos. Los convertidores de tipos suelen estar asociados a tipos o miembros. Se invocan cuando una creación de gráficos de objetos o una serialización encuentra la 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, se puede implementar una extensión de marcado para restringir deliberadamente su uso a ciertos miembros o tipos de destino, utilizando el contexto de servicio). Las extensiones de marcado pueden invalidar una asociación de convertidor de tipos. O bien, pueden usarse para especificar un valor de atributo para miembros que de otra forma no admitirían una sintaxis de texto.

Para obtener más información sobre el modelo de implementación de la extensión de marcado para XAML, vea Información general sobre las extensiones de marcado para el lenguaje XAML.

NotaNota

Los tipos MarkupExtension y ValueSerializer están en el espacio de nombres System.Windows.Markup y no en el espacio de nombres System.Xaml.Esto no implica que estos tipos sean específicos de WPF o de las tecnologías de Windows Forms que, por lo demás, rellenan los espacios de nombres CLR que contienen la cadena Windows.MarkupExtension y ValueSerializer están en el ensamblado System.Xaml y no tienen ninguna dependencia del marco.Estos tipos existían en el espacio de nombres CLR para .NET Framework 3.0 y permanecen en ese espacio de nombres CLR en .NET Framework 4 para evitar interrumpir las referencias en los proyectos de WPF existentes.Para obtener más información, vea Tipos migrados de WPF a System.Xaml.

Serializadores de valor

ValueSerializer es un convertidor de tipos especializado que se ha optimizado para convertir un objeto en una cadena. ValueSerializer para XAML podría no implementar el método ConvertFrom en absoluto. Una implementación de ValueSerializer obtiene los 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.

Un convertidor de valores que está asociado a un tipo o miembro se notifica mediante su propia propiedad XamlType.ValueSerializer en el sistema de tipos XAML y para las implementaciones del sistema de escritura de XAML que usan el procesamiento del bucle de nodo XAML para la serialización. El significado para los sistemas de escritura de XAML que realizan la serialización consiste en que, si existen las propiedades XamlType.TypeConverter y XamlType.ValueSerializer, el convertidor de tipos se debería utilizar para la ruta de acceso de carga y el serializador de valor se debería utilizar para la ruta de acceso de guardar. Si existe XamlType.TypeConverter pero XamlType.ValueSerializer es null, el convertidor de tipos se utiliza también para la ruta de acceso de guardar.

Otros convertidores de valor

Un convertidor de valores se puede extender más allá de los modelos concretos 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 la proporcionan los Servicios XAML de .NET Framework. El sistema de tipos XAML existente tiene representaciones y sistemas de notificación para los convertidores de tipos, extensiones de marcado y serializadores de valor, pero no para los formularios personalizados de conversión de valores. Si desea crear convertidores de valores personalizados, utilice el tipo de XamlValueConverter<TConverterBase>.

Convertidores de tipos y extensiones de marcado en combinación

Las extensiones de marcado y los convertidores de tipos se utilizan para diferentes situaciones en XAML. Aunque el contexto está disponible para los usos de la extensión de marcado, el comportamiento de la conversión de tipos de propiedades en las que una extensión de marcado proporciona un valor generalmente no se comprueba en las implementaciones de la extensión de marcado. En otras palabras, aunque una extensión de marcado devuelva una cadena de texto como su resultado de ProvideValue, no se invoca al comportamiento de la conversión de tipos en esa cadena tal y como se aplica a una propiedad concreta o al tipo de valor de propiedad. Generalmente, el propósito de una extensión de marcado es procesar una cadena y devolver un objeto sin implicar a ningún convertidor de tipos.

Contexto de servicio para un convertidor de valores

Cuando se implementa un convertidor de valores, a menudo se necesita obtener acceso a un contexto en el que se aplique el convertidor de valores. Este contexto se conoce como contexto de servicio. El contexto de servicio podría incluir información como el contexto de esquema XAML activo, el acceso al sistema de asignación de tipos que proporcionan 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 obtener acceso a los servicios que un contexto de servicio podría proporcionar, vea Contextos de servicio disponibles para los convertidores de tipos y las extensiones de marcado.

Vea también

Referencia

MarkupExtension

XamlObjectWriter

Otros recursos

Información general sobre las extensiones de marcado para el lenguaje XAML

Información general sobre los convertidores de tipos para XAML

Contextos de servicio disponibles para los convertidores de tipos y las extensiones de marcado