Tipos migrados de WPF a System.Xaml

En .NET Framework 3.5 y .NET Framework 3.0, tanto Windows Presentation Foundation (WPF) como Windows Workflow Foundation incluían una implementación del lenguaje XAML. Muchos de los tipos públicos que proporcionaban extensibilidad para la implementación XAML de WPF existían en los ensamblados de WindowsBase, PresentationCore y PresentationFramework. Del mismo modo, los tipos públicos que proporcionaban extensibilidad para XAML de Windows Workflow Foundation existían en el ensamblado System.Workflow.ComponentModel. En .NET Framework 4, algunos de los tipos relacionados con XAML se migraron al ensamblado System.Xaml. Una implementación común de .NET Framework de los servicios de 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 global de .NET Framework 4 para el lenguaje XAML. En este artículo se enumeran los tipos que se migraron y se describen los problemas relacionados con la migración.

Nombres de 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 de WPF se proporcionan ahora como puntos o servicios de extensibilidad para cualquier implementación de XAML. Para contribuir a que estén disponibles para escenarios más generales, los tipos se reenvían desde su ensamblado WPF original al ensamblado System.Xaml. Esto habilita escenarios de extensibilidad de XAML sin tener que incluir los ensamblados de otros marcos (como WPF y Windows Workflow Foundation).

En cuanto a los tipos migrados, la mayoría de los tipos permanece en el espacio de nombres System.Windows.Markup . En parte, esto se hizo para evitar interrumpir las asignaciones de espacio de nombres de CLR en las implementaciones existentes archivo por archivo. Como resultado, el espacio de nombres System.Windows.Markup de .NET Framework 4 contiene una mezcla de tipos de soporte de lenguaje XAML generales (del ensamblado System.Xaml) y tipos que son específicos para la implementación XAML de WPF (de WindowsBase y otros ensamblados WPF). Todo tipo que se ha migrado a System.Xaml, pero existía anteriormente en un ensamblado de WPF, tiene compatibilidad de reenvío de tipos en la versión 4 del ensamblado de WPF.

Tipos de soporte de XAML en Workflow

Windows Workflow Foundation también proporcionaba tipos de soporte de XAML; en muchos casos, estos tenían nombres cortos idénticos a un equivalente de WPF. La siguiente es una lista de algunos tipos de soporte de XAML en Windows Workflow Foundation:

Estos tipos de soporte siguen existiendo en los ensamblados de Windows Workflow Foundation para .NET Framework 4 y pueden utilizarse aún para aplicaciones de Windows Workflow Foundation específicas; sin embargo, no se debe hacer referencia a ellos desde aplicaciones o marcos que no utilicen Windows Workflow Foundation.

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, MarkupExtensionestá pensado para cualquier escenario de extensibilidad de XAML que use servicios de XAML de .NET, no solo para los que se basan en marcos de trabajo específicos. Siempre que sea posible, los marcos específicos y el código de usuario del marco deben compilarse también en la clase MarkupExtension para la extensión XAML.

Clases de servicio de soporte de MarkupExtension

.NET Framework 3.5 y .NET Framework 3.0 para WPF proporcionan 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. Estos servicios son los siguientes:

Nota:

Otro servicio de .NET Framework 3.5 que está relacionado con las extensiones de marcado es la interfaz IReceiveMarkupExtension. IReceiveMarkupExtension no se migró y se marca como [Obsolete] para .NET Framework 4. Los escenarios que usaban IReceiveMarkupExtension deben usar devoluciones de llamada con atributos XamlSetMarkupExtensionAttribute en su lugar. AcceptedMarkupExtensionExpressionTypeAttribute también está marcado como [Obsolete].

Características del lenguaje XAML

Varias características del lenguaje XAML y componentes para WPF existían ya 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, estas existen en el ensamblado System.Xaml para que los proyectos que no incluyen ensamblados de WPF puedan utilizar estas características de nivel de lenguaje XAML. WPF utiliza estas mismas implementaciones para las aplicaciones .NET Framework 4. Como en los otros casos que se enumeran en este tema, los tipos de soporte 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 de compatibilidad de características 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 System.Xaml no tenga clases específicas de soporte, la lógica general para procesar las características del lenguaje XAML reside ahora en System.Xaml y en sus lectores XAML y sistemas de escritura XAML implementados. Por ejemplo, x:TypeArguments es un atributo que es procesado por los lectores y sistemas de escritura 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 del sistema de tipos XAML, etc. Para obtener más información sobre la documentación de referencia para XAML, consulteServicios XAML.

ValueSerializer y clases compatibles

La clase ValueSerializer admite la conversión de tipo a una cadena, especialmente para los casos de serialización de XAML en los que 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 para WPF estaba en el ensamblado WindowsBase. En .NET Framework 4, la clase ValueSerializer se encuentra en System.Xaml y está diseñada para cualquier escenario de extensibilidad XAML, no solo para los que se basan en WPF. IValueSerializerContext (un servicio de soporte) y DateTimeValueSerializer (una subclase concreta) también se migran a System.Xaml.

XAML de WPF incluía varios atributos que se pueden aplicar a los tipos CLR para indicar algo sobre su comportamiento XAML. La siguiente es una lista de los atributos que existían en los ensamblados WPF en .NET Framework 3.5 y .NET Framework 3.0. Estos atributos se han migrado 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. IComponentConnector sirve principalmente para el soporte técnico de herramientas y los compiladores de marcado de 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 de un ámbito de nombres de XAML.

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

XamlReader

XamlWriter

XamlParseException

La implementación de 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 se utilizan tipos WPF o se hacen derivaciones de tipos WPF, normalmente debería usar las implementaciones de WPF de XamlReader y XamlWriter en lugar de las implementaciones de System.Xaml. Para más información, vea la sección Comentarios en System.Windows.Markup.XamlReader y System.Windows.Markup.XamlWriter.

Si va a incluir referencias a ensamblados de WPF y System.Xaml y también usa instrucciones include para los espacios de nombres tanto System.Windows.Markup como System.Xaml , puede que necesite completar las llamadas a estas API para resolver los tipos sin ambigüedad.