Share via


Interoperabilidad entre Windows y WPF

WPF y Windows Forms presentan dos arquitecturas diferentes para crear interfaces de aplicaciones. El espacio de nombres System.Windows.Forms.Integration proporciona clases que habilitan los escenarios de interoperación más comunes. Las dos clases clave que implementan las funciones de interoperación son WindowsFormsHost y ElementHost. En este tema se describe qué escenarios de interoperación se admiten y cuáles no.

NotaNota

Se presta especial atención al escenario de control híbrido.Un control híbrido tiene un control de una tecnología anidado en un control de otra tecnología.También se denomina una interoperación anidada.Un control híbrido de varios niveles tiene más de un nivel de anidamiento de controles híbridos.Un ejemplo de una interoperación anidada de varios niveles es un control de Windows Forms que contiene un control de WPF, que contiene otro control de Windows Forms.No se admiten los controles híbridos de varios niveles.

Este tema contiene las secciones siguientes.

  • Hospedar controles de Windows Forms en WPF
  • Hospedar controles de WPF en Windows Forms
  • Temas relacionados

Hospedar controles de Windows Forms en WPF

Se admiten los escenarios de interoperación siguientes cuando un control de WPF hospeda un control de Windows Forms:

  • El control de WPF puede hospedar uno o más controles de Windows Forms mediante XAML.

  • Puede hospedar uno o más controles de Windows Forms mediante código.

  • Puede hospedar controles contenedores de Windows Forms que contienen otros controles de Windows Forms.

  • Puede hospedar un formulario principal-detalle con un elemento principal de WPF y detalles de Windows Forms.

  • Puede hospedar un formulario principal-detalle con un elemento principal de Windows Forms y detalles de WPF.

  • Puede hospedar uno o más controles ActiveX.

  • Puede hospedar uno o más controles compuestos.

  • Puede hospedar controles híbridos mediante Extensible Application Markup Language (XAML).

  • Puede hospedar controles híbridos mediante código.

Compatibilidad de diseño

En la lista siguiente se describen las limitaciones conocidas cuando el elemento WindowsFormsHost intenta integrar su control de Windows Forms hospedado en el sistema de diseño de WPF.

  • En algunos casos, no se puede cambiar el tamaño de los controles de Windows Forms o únicamente se pueden ajustar a dimensiones concretas. Por ejemplo, un control ComboBox de Windows Forms únicamente admite un alto, que se define basándose en el tamaño de fuente de control. En un diseño dinámico de WPF, en que se da por hecho que los elementos pueden ajustarse verticalmente, un control ComboBox hospedado no se ajustará según lo esperado.

  • Los controles de Windows Forms no se pueden girar ni sesgar. Por ejemplo, al girar la interfaz de usuario 90 grados, los controles de Windows Forms hospedados mantendrán su posición vertical.

  • En la mayoría de los casos, los controles de Windows Forms no admiten el ajuste de escala proporcional. Aunque se ajustará la escala de las dimensiones totales del control, es posible que el tamaño de los controles secundarios y de los elementos componentes del control no cambien según lo esperado. Esta limitación depende de en qué medida admita cada control de Windows Forms el ajuste de escala.

  • En una interfaz de usuario de WPF, puede cambiar el orden z de los elementos para controlar el comportamiento de superposición. Un control de Windows Forms hospedado se dibuja en un indicador de ventana (HWND) independiente, por lo que siempre se dibuja encima de los elementos de WPF.

  • Los controles de Windows Forms admiten el ajuste automático de escala basado en el tamaño de fuente. En una interfaz de usuario de WPF, al cambiar el tamaño de fuente no se cambia el tamaño del diseño completo, aunque es posible que algunos elementos individuales ajusten su tamaño dinámicamente.

Propiedades de ambiente

Algunas de las propiedades de ambiente de los controles de WPF tienen equivalentes en Windows Forms. Estas propiedades de ambiente se propagan a los controles de Windows Forms hospedados y expuestos como propiedades públicas en el control WindowsFormsHost. El control WindowsFormsHost convierte cada propiedad de ambiente de WPF en su equivalente en Windows Forms.

Para obtener más información, consulte Asignación de propiedades en formularios Windows Forms y WPF.

Comportamiento

En la tabla siguiente se describe el comportamiento de interoperación.

Behavior

Compatible

No compatible

Transparencia

La representación de los controles de Windows Forms admite la transparencia. El fondo del control de WPF primario se puede convertir en el fondo de los controles de Windows Forms hospedados.

Algunos controles de Windows Forms no admiten la transparencia. Por ejemplo, los controles TextBox y ComboBox no serán transparentes cuando se hospeden en WPF.

Desplazamiento mediante la tecla TAB

El orden de desplazamiento mediante la tecla TAB para los controles de Windows Forms hospedados es el mismo que cuando dichos controles se encuentran hospedados en una aplicación basada en Windows Forms.

El desplazamiento desde un control de WPF hasta un control de Windows Forms utilizando la tecla TAB y las teclas MAYÚS+TAB funciona del modo habitual.

Los controles de Windows Forms que tienen una propiedad TabStop establecida en el valor false no reciben el foco cuando el usuario se desplaza de un control a otro mediante la tecla TAB.

  • Cada control WindowsFormsHost tiene un valor de TabIndex, que determina cuándo ese control WindowsFormsHost recibirá el foco.

  • Los controles de Windows Forms contenidos en un contenedor de WindowsFormsHost siguen el orden especificado por la propiedad TabIndex. Al presionar la tecla TAB desde el último índice de tabulación, el foco pasa al siguiente control de WPF, si lo hay. Si no hay ningún otro control de WPF que pueda recibir el foco, al presionar la tecla TAB el foco regresa al primer control de Windows Forms según el orden de tabulación.

  • Los valores de TabIndex para los controles contenidos en WindowsFormsHost son relativos a los controles de Windows Forms relacionados contenidos en el control WindowsFormsHost.

  • El desplazamiento mediante la tecla TAB respeta el comportamiento específico de los controles. Por ejemplo, al presionar la tecla TAB en un control TextBox cuya propiedad AcceptsTab está establecida en el valor true, se escribe una tabulación en el cuadro de texto, en lugar de mover el foco.

No es aplicable

Navegación con las teclas de dirección

  • La navegación con las teclas de dirección en el control WindowsFormsHost es igual que en un control contenedor de Windows Forms ordinario: las teclas de dirección ARRIBA e IZQUIERDA seleccionan el control anterior, mientras que las teclas de dirección ABAJO y DERECHA seleccionan el control siguiente.

  • Las teclas de dirección ARRIBA e IZQUIERDA del primer control contenido en el control WindowsFormsHost realizan la misma acción que el método abreviado de teclado MAYÚS+TAB. Si hay un control de WPF que puede recibir el foco, éste sale del control WindowsFormsHost. Este comportamiento difiere del comportamiento de ContainerControl estándar en que no se produce ningún ajuste al último control. Si no hay ningún otro control de WPF que pueda recibir el foco, este vuelve al último control de Windows Forms según el orden de tabulación.

  • Las teclas de dirección ABAJO y DERECHA del último control contenido en el control WindowsFormsHost realizan la misma acción que la tecla TAB. Si hay un control de WPF que puede recibir el foco, éste sale del control WindowsFormsHost. Este comportamiento difiere del comportamiento de ContainerControl estándar en que no se produce ningún ajuste al primer control. Si no hay ningún otro control de WPF que pueda recibir el foco, éste vuelve al primer control de Windows Forms según el orden de tabulación.

No es aplicable

Aceleradores

Los aceleradores funcionan como de costumbre, excepto cuando se indique otra cosa en la columna "No compatible".

Los aceleradores duplicados entre tecnologías no funcionan como los aceleradores duplicados ordinarios. Cuando un acelerador se duplica entre dos tecnologías, y al menos uno de ellos se encuentra en un control de Windows Forms y el otro en un control de WPF, el control de Windows Forms recibe siempre el acelerador. El foco no alterna entre los dos controles cuando se presiona el acelerador duplicado.

Teclas de método abreviado

Las teclas de método abreviado funcionan como de costumbre, excepto cuando se indique otra cosa en la columna "No compatible".

  • Las teclas de método abreviado de Windows Forms que se administran en la fase de preprocesamiento siempre tienen preferencia sobre las teclas de método abreviado de WPF. Por ejemplo, si tiene un control ToolStrip para el que se han definido las teclas de método abreviado CTRL+S, y hay un comando de WPF enlazado a CTRL+S, siempre se invoca primero el controlador del control ToolStrip, sin tener en cuenta el foco.

  • Las teclas de método abreviado de Windows Forms que se controlan mediante el evento KeyDown se procesan en último lugar en WPF. Puede evitar este comportamiento invalidando el método IsInputKey del control de Windows Forms o controlando el evento PreviewKeyDown. Devuelva true del método IsInputKey o establezca el valor de la propiedad PreviewKeyDownEventArgs.IsInputKey en true en el controlador de eventos PreviewKeyDown.

AcceptsReturn, AcceptsTab y otros comportamientos específicos del control

Las propiedades que cambian el comportamiento predeterminado del teclado funcionan como de costumbre, suponiendo que el control de Windows Forms invalide el método IsInputKey para devolver true.

Los controles de Windows Forms que cambian el comportamiento predeterminado del teclado controlando el evento KeyDown se procesan en último lugar en el control host de WPF. Dado que estos controles se procesan en último lugar, pueden dar lugar a comportamientos inesperados.

Eventos Enter y Leave

Cuando el foco no va al control contenedor ElementHost, se provocan los eventos Enter y Leave como de costumbre cuando el foco cambia en un control WindowsFormsHost único.

Los eventos Enter y Leave no se provocan cuando se producen los cambios de foco siguientes:

Multithreading

Se admiten todas las variedades de multithreading.

Tanto la tecnología WPF como Windows Forms suponen la utilización de un modelo de simultaneidad de un solo subproceso. Durante la depuración, las llamadas a los objetos de marco de otros subprocesos iniciarán una excepción para aplicar este requisito.

Seguridad

Todos los escenarios de interoperación requieren plena confianza.

Ningún escenario de interoperación se permite en confianza parcial.

Accesibilidad

Se admiten todos los escenarios de accesibilidad. Los productos de tecnología de ayuda funcionan correctamente cuando se utilizan para aplicaciones híbridas que contienen controles de Windows Forms y de WPF.

No es aplicable

Portapapeles

Todas las operaciones del Portapapeles funcionan como de costumbre. Esto incluye cortar y pegar entre controles de Windows Forms y de WPF.

No es aplicable

Característica de arrastrar y colocar

Todas las operaciones de arrastrar y colocar funcionan como de costumbre. Esto incluye las operaciones entre controles de Windows Forms y de WPF.

No es aplicable

Hospedar controles de WPF en Windows Forms

Se admiten los escenarios de interoperación siguientes cuando un control de Windows Forms hospeda un control de WPF:

  • Hospedar uno o varios controles de WPF mediante código.

  • Asociar una hoja de propiedades a uno o más controles de WPF hospedados.

  • Hospedar una o más páginas de WPF en un formulario.

  • Iniciar una ventana de WPF.

  • Hospedar un formulario principal-detalle con un elemento principal de Windows Forms y detalles de WPF.

  • Hospedar un formulario principal-detalle con un elemento principal de WPF y detalles de Windows Forms.

  • Hospedar controles de WPF personalizados.

  • Hospedar controles híbridos.

Propiedades de ambiente

Algunas de las propiedades de ambiente de los controles de Windows Forms tienen equivalentes en WPF. Estas propiedades de ambiente se propagan a los controles de WPF hospedados y expuestos como propiedades públicas en el control ElementHost. El control ElementHost convierte cada propiedad de ambiente de Windows Forms en su equivalente en WPF.

Para obtener más información, consulte Asignación de propiedades en formularios Windows Forms y WPF.

Comportamiento

En la tabla siguiente se describe el comportamiento de interoperación.

Behavior

Compatible

No compatible

Transparencia

La representación de los controles de WPF admite la transparencia. El fondo del control de Windows Forms primario se puede convertir en el fondo de los controles de WPF hospedados.

No es aplicable

Multithreading

Se admiten todas las variedades de multithreading.

Tanto la tecnología WPF como Windows Forms suponen la utilización de un modelo de simultaneidad de un solo subproceso. Durante la depuración, las llamadas a los objetos de marco de otros subprocesos iniciarán una excepción para aplicar este requisito.

Seguridad

Todos los escenarios de interoperación requieren plena confianza.

Ningún escenario de interoperación se permite en confianza parcial.

Accesibilidad

Se admiten todos los escenarios de accesibilidad. Los productos de tecnología de ayuda funcionan correctamente cuando se utilizan para aplicaciones híbridas que contienen controles de Windows Forms y de WPF.

No es aplicable

Portapapeles

Todas las operaciones del Portapapeles funcionan como de costumbre. Esto incluye cortar y pegar entre controles de Windows Forms y de WPF.

No es aplicable

Característica de arrastrar y colocar

Todas las operaciones de arrastrar y colocar funcionan como de costumbre. Esto incluye las operaciones entre controles de Windows Forms y de WPF.

No es aplicable

Vea también

Tareas

Tutorial: Hospedar un control de Windows Forms en WPF

Referencia

ElementHost

WindowsFormsHost

Conceptos

Tutorial: Hospedar un control compuesto de formularios Windows Forms en WPF

Tutorial: Hospedar un control compuesto de WPF en formularios Windows Forms

Asignación de propiedades en formularios Windows Forms y WPF