Share via


Tipos migrados de WPF a System.Xaml

En .NET Framework versión 3.5 y .NET Framework versión 3.0, Windows Presentation Foundation (WPF) y Windows Workflow Foundation incluían una implementación del lenguaje XAML. Muchos de los tipos públicos que proporcionaban extensibilidad para la implementación de XAML de WPF existían en los ensamblados de WindowsBase, PresentationCore y PresentationFramework. Igualmente, los tipos públicos que proporcionaban la extensibilidad para XAML de Windows Workflow Foundation existían en el ensamblado System.Workflow.ComponentModel. En.NET Framework versión 4, algunos de los tipos relacionados con XAML se migran al ensamblado System.Xaml. Una implementación de .NET Framework común de los servicios del lenguaje XAML habilita muchos escenarios de extensibilidad de XAML que se definieron originalmente en la implementación de XAML de un marco concreto pero ahora forman parte de la compatibilidad general del lenguaje XAML de .NET Framework 4. En este tema se hace una lista de los tipos que se migran y se discuten los problemas relacionados con la migración.

Este tema contiene las secciones siguientes.

  • Ensamblados y espacios de nombres
  • MarkupExtension
  • Clases de servicio que admiten MarkupExtension
  • Características del lenguaje XAML
  • ValueSerializer y clases compatibles
  • Atributos relacionados con XAML
  • Clases diversas
  • Clases relacionadas con XAML con nombres compartidos que existen en WPF y System.Xaml
  • Temas relacionados

Ensamblados y espacios de nombres

En .NET Framework 3.5 y .NET Framework 3.0, los tipos que WPF implementaba para admitir XAML estaban generalmente en el espacio de nombres System.Windows.Markup. La mayoría de estos tipos estaban en el ensamblado WindowsBase.

En .NET Framework 4, hay un nuevo espacio de nombres System.Xaml y un nuevo ensamblado System.Xaml. Muchos de los tipos que se implementaron originalmente para XAML en WPF se proporcionan ahora como puntos o servicios de extensibilidad para cualquier implementación de XAML. Como parte de hacer que estén disponibles para escenarios más generales, los tipos se reenvían de su ensamblado de WPF original al ensamblado System.Xaml. Esto habilita los escenarios de extensibilidad de XAML sin tener que incluir los ensamblados de otros marcos (como WPF yWindows Workflow Foundation).

Para los tipos migrados, la mayoría de los tipos permanecen en el espacio de nombres System.Windows.Markup. Esto consistía parcialmente en evitar la ruptura de las asignaciones de espacios de nombres de CLR en las implementaciones existentes archivo por archivo. Por consiguiente, el espacio de nombres System.Windows.Markup de .NET Framework 4 contiene una mezcla de tipos compatibles del lenguaje XAML generales (del ensamblado System.Xaml) y tipos que son específicos de la implementación de XAML de WPF (de WindowsBase y otros ensamblados de WPF). Cualquier tipo que se haya migrado a System.Xaml, pero que existía previamente en un ensamblado de WPF, tiene la compatibilidad de reenvío de tipos en la versión 4 del ensamblado de WPF.

Tipos de soporte de XAML del flujo de trabajo

Windows Workflow Foundation también proporcionaba los tipos de soporte de XAML y, en muchos casos, tenía nombres cortos idénticos a un WPF equivalente. Lo siguiente es una lista de tipos de soporte de XAML de Windows Workflow Foundation:

Estos tipos de compatibilidad todavía existen en los ensamblados de Windows Workflow Foundation para .NET Framework 4 y todavía se pueden usar para las aplicaciones de Windows Workflow Foundation concretas; sin embargo, las aplicaciones o marcos que no usen Windows Workflow Foundation no deben hacer referencia a ellos.

MarkupExtension

En .NET Framework 3.5 y .NET Framework 3.0, la clase MarkupExtension para WPF estaba en el ensamblado WindowsBase. Existía una clase paralela para Windows Workflow Foundation, MarkupExtension en el ensamblado System.Workflow.ComponentModel. En .NET Framework 4, la clase MarkupExtension se migra al ensamblado System.Xaml. En .NET Framework 4, MarkupExtension está pensado para cualquier escenario de extensibilidad de XAML que use los servicios XAML de .NET Framework, no solo para los que emplean marcos concretos. Cuando sea posible, los marcos o el código de usuario específicos en el marco de trabajo también deben emplear la clase MarkupExtension para la extensión XAML.

Clases de servicio que admiten MarkupExtension

.NET Framework 3.5 y .NET Framework 3.0 para WPF proporcionaban varios servicios que estaban disponibles para los implementadores de MarkupExtension y las implementaciones de TypeConverter para admitir el uso de tipo y propiedad en XAML. Entre estos servicios se incluyen los siguientes:

NotaNota

Otro servicio de .NET Framework 3.5 que se relaciona con las extensiones de marcado es la interfaz IReceiveMarkupExtension. IReceiveMarkupExtension no se migró y se marcó como [Obsolete] para .NET Framework 4.Los escenarios que previamente utilizaron IReceiveMarkupExtension deberían usar en su lugar devoluciones de llamada de XamlSetMarkupExtensionAttribute con atributos.AcceptedMarkupExtensionExpressionTypeAttribute también se marca como [Obsolete].

Características del lenguaje XAML

Varias características y componentes del lenguaje XAML para WPF existían previamente en el ensamblado PresentationFramework. Se implementaban como una subclase MarkupExtension para exponer los usos de la extensión de marcado en el marcado XAML. En .NET Framework 4, estos existen en el ensamblado System.Xaml para que los proyectos que no incluyen ensamblados de WPF puedan usar estas características de nivel de lenguaje XAML. WPF utiliza estas mismas implementaciones para las aplicaciones de .NET Framework 4. Como ocurre con otros casos que se incluyen en este tema, los tipos compatibles continúan existiendo en el espacio de nombres System.Windows.Markup para evitar interrumpir las referencias anteriores.

La tabla siguiente contiene una lista de las clases que admiten las características de XAML que se definen en System.Xaml.

Característica del lenguaje XAML

Uso

ArrayExtension

<x:Array ...>

NullExtension

{x:Null}

StaticExtension

{x:Static ...}

TypeExtension

{x:Type ...}

Aunque puede que System.Xaml no tenga clases auxiliares concretas, la lógica general para procesar las características del lenguaje XAML reside ahora en System.Xaml y sus lectores y escritores de XAML implementados. Por ejemplo, x:TypeArguments es un atributo que procesan los lectores y escritores de XAML de las implementaciones de System.Xaml, se puede tener en cuenta en el flujo de nodo XAML, tiene el control en el contexto de esquema XAML predeterminado (basado en CLR), tiene una representación de sistema de tipos XAML, etc. En consecuencia, la documentación de referencia para todas las características de nivel de lenguaje XAML es un tema de Servicios XAML y esa área general del conjunto de documentación de .NET Framework, en lugar de formar parte del conjunto de documentación de WPF como tema de Elementos fundamentales de WPF (al igual que en el caso de los conjuntos de documentación de la versión 3.5).

ValueSerializer y clases compatibles

La clase ValueSerializer admite la conversión de tipos a una cadena, particularmente para los casos de serialización de XAML donde la serialización puede requerir varios modos o nodos en el resultado. En .NET Framework 3.5 y .NET Framework 3.0, la clase ValueSerializer de WPF estaba en el ensamblado WindowsBase. En .NET Framework 4, la clase ValueSerializer está en System.Xaml y está diseñada para cualquier escenario de extensibilidad de XAML, no solo para los que emplean WPF. IValueSerializerContext (un servicio auxiliar) y DateTimeValueSerializer (una subclase concreta) también se migran a System.Xaml.

Atributos relacionados con XAML

XAML de WPF incluía varios atributos que se pueden aplicar a los tipos CLR para indicar algo sobre su comportamiento de XAML. A continuación, se muestra una lista de los atributos que existían en los ensamblados de WPF en .NET Framework 3.5 y .NET Framework 3.0. Estos atributos se migran a System.Xaml en .NET Framework 4.

Clases diversas

La interfaz IComponentConnector existía en WindowsBase en .NET Framework 3.5 y .NET Framework 3.0, pero existe en System.Xaml en .NET Framework 4. La interfaz IComponentConnector está pensada principalmente para el soporte de herramientas y los compiladores de marcado XAML.

La interfaz INameScope existía en WindowsBase en .NET Framework 3.5 y .NET Framework 3.0, pero existe en System.Xaml en .NET Framework 4. INameScope define las operaciones básicas para un ámbito de nombres XAML.

Clases relacionadas con XAML con nombres compartidos que existen en WPF y System.Xaml

Las siguientes clases existen en los ensamblados de WPF y el ensamblado System.Xaml en .NET Framework 4:

XamlReader

XamlWriter

XamlParseException

La implementación WPF se encuentra en el espacio de nombres System.Windows.Markup y el ensamblado PresentationFramework. La implementación de System.Xaml se encuentra en el espacio de nombres System.Xaml. Si está utilizando los tipos WPF o deriva de los tipos WPF, normalmente debería usar las implementaciones WPF de XamlReader y XamlWriter en lugar de las implementaciones de System.Xaml. Para obtener más información, vea los comentarios de System.Windows.Markup.XamlReader y System.Windows.Markup.XamlWriter.

Si va a incluir las referencias a ensamblados de WPF y System.Xaml, y también está usando las instrucciones include para los espacios de nombres System.Xaml y System.Windows.Markup, quizás necesite calificar totalmente las llamadas a estas API para resolver los tipos sin ambigüedad.

Vea también

Conceptos

Servicios XAML