Interoperabilidad entre Windows Forms 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 escenarios de interoperación comunes. Las dos clases clave que implementan las capacidades de interoperación son WindowsFormsHost y ElementHost. En este tema se describen los escenarios de interoperación que son compatibles y los que no lo son.

Nota:

Se presta especial atención al escenario de un control híbrido. Un control híbrido tiene un control de una tecnología anidada en un control de otra tecnología (también se denomina interoperación anidada). Un control híbrido multinivel tiene más de un nivel de anidamiento de control híbrido. Un ejemplo de una interoperación anidada multinivel sería un control de Windows Forms que contiene un control de WPF, que contiene otro control de Windows Forms. Los controles híbridos multinivel no se admiten.

Hospedar controles de Windows Forms en WPF

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

  • El control de WPF puede hospedar uno o varios controles de Windows Forms mediante XAML.

  • Puede hospedar uno o varios controles de Windows Forms mediante código.

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

  • Puede hospedar un formulario principal/detalle con un formulario principal de WPF y un formulario de detalle de Windows Forms.

  • Puede hospedar un formulario principal/detalle con un formulario principal de Windows Forms y un formulario de detalle de WPF.

  • Puede hospedar uno o varios controles de ActiveX.

  • Puede hospedar uno o varios controles compuestos.

  • Puede hospedar controles híbridos mediante lenguaje XAML.

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

Compatibilidad de diseño

En la siguiente lista se describen las limitaciones conocidas cuando el elemento WindowsFormsHost intenta integrar su control hospedado de Windows Forms 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 solo se pueden fijar unas dimensiones específicas). Por ejemplo, los controles ComboBox de Windows Forms solo admiten una altura, que se define con el tamaño de fuente del control. En un diseño dinámico de WPF, que presupone que los elementos se pueden ajustar verticalmente, los controles ComboBox hospedados no se ajustarán según lo previsto.

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

  • En la mayoría de los casos, los controles de Windows Forms no admiten el escalado proporcional. Aunque las dimensiones generales del control se escalarán, los controles secundarios y los elementos de los componentes del control podrían no cambiar de tamaño según lo previsto. Esta limitación depende del grado de compatibilidad del escalado de cada control de Windows Forms.

  • En una interfaz de usuario de WPF, puede cambiar el orden z de los elementos para controlar el comportamiento de superposición. Los controles hospedados de Windows Forms se dibujan en un HWND independiente, por lo que siempre se dibujan en la parte superior de los elementos de WPF.

  • Los controles de Windows Forms admiten el escalado automático en función del tamaño de fuente. En una interfaz de usuario de WPF, al cambiar el tamaño de fuente no se cambia el tamaño de todo el diseño, aunque es posible que algunos elementos cambien de tamaño dinámicamente.

Propiedades ambiente

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

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

Comportamiento

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

Comportamiento Compatible No compatible
Transparencia La representación de controles de Windows Forms admite la transparencia. El fondo del control primario de WPF se puede convertir en el fondo de los controles hospedados de Windows Forms. Algunos controles de Windows Forms no admiten transparencia. Por ejemplo, los controles TextBox y ComboBox no serán transparentes si los hospeda WPF.
Tabulación El orden de tabulación de los controles hospedados de Windows Forms es el mismo que cuando dichos controles se hospedan en una aplicación basada en Windows Forms.

La tabulación desde un control de WPF a un control de Windows Forms con la tecla TAB y las teclas MAYÚS + TAB funciona como de costumbre.

Los controles de Windows Forms que tienen un valor de propiedad TabStop de false no reciben el foco cuando el usuario se desplaza por los controles.

- Cada control WindowsFormsHost tiene un valor TabIndex, que determina cuándo recibirá el foco dicho control WindowsFormsHost.
- Los controles de Windows Forms que están dentro de un contenedor WindowsFormsHost siguen el orden especificado por la propiedad TabIndex. La tabulación desde el último índice de tabulación sitúa el foco en el siguiente control de WPF, en el caso de que haya alguno. Si no hay más controles de WPF que puedan recibir el foco, la tabulación vuelve al primer control de Windows Forms en el orden de tabulación.
- Los valores TabIndex de los controles situados dentro del control WindowsFormsHost son relativos a los controles de Windows Forms del mismo nivel incluidos en el control WindowsFormsHost.
- La tabulación respeta el comportamiento específico del control. Por ejemplo, al pulsar la tecla TAB en un control TextBox que tiene un valor de propiedad AcceptsTab de true, se introduce una tabulación en el cuadro de texto en vez de mover el foco.
No 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 normal de Windows Forms: con las teclas de flecha arriba y flecha izquierda se selecciona el control anterior, mientras que con las teclas de flecha abajo y flecha derecha se selecciona el siguiente control.
- Las teclas de flecha arriba y flecha izquierda del primer control que se encuentra en el control WindowsFormsHost llevan a cabo la misma acción que el método abreviado de teclado MAYÚS + TAB. Si hay un control de WPF que pueda recibir el foco, este se desplazará fuera del control WindowsFormsHost. Este comportamiento difiere del comportamiento normal de ContainerControl en que no se efectúa ningún ajuste en el último control. Si no hay más controles de WPF que puedan recibir el foco, el foco vuelve al último control de Windows Forms en el orden de tabulación.
- Las teclas de flecha abajo y flecha derecha del último control que se encuentra en el control WindowsFormsHost llevan a cabo la misma acción que la tecla TAB. Si hay un control de WPF que pueda recibir el foco, este se desplazará fuera del control WindowsFormsHost. Este comportamiento difiere del comportamiento normal de ContainerControl en que no se efectúa ningún ajuste en el primer control. Si no hay más controles de WPF que puedan recibir el foco, el foco vuelve al primer control de Windows Forms en el orden de tabulación.
No aplicable.
Aceleradores Los aceleradores funcionan como de costumbre, excepto donde se indique en la columna "No compatible". Los aceleradores duplicados entre tecnologías no funcionan como los aceleradores duplicados normales. Cuando se duplica un acelerador entre tecnologías, con al menos uno de ellos en un control de Windows Forms y otro en un control de WPF, el control de Windows Forms siempre recibe el acelerador. El foco no alterna entre los controles cuando se presiona el acelerador duplicado.
Teclas de método abreviado Las teclas de método abreviado funcionan como de costumbre, excepto donde se indique en la columna "No compatible". - Las teclas de método abreviado de Windows Forms que se controlan en la fase de preprocesamiento siempre tienen prioridad sobre las teclas de método abreviado de WPF. Por ejemplo, si tiene un control ToolStrip con las teclas de método abreviado CTRL+S definidas y hay un comando de WPF enlazado a CTRL+S, el identificador de control ToolStrip siempre se invoca en primer lugar, independientemente del foco.
- Las teclas de método abreviado de Windows Forms que se controlan con 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 gestionando el evento PreviewKeyDown. Devuelva true desde el 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 reemplace 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 un comportamiento inesperado.
Eventos Enter y Leave Cuando el foco no se dirige hacia el control ElementHost, los eventos Enter y Leave se generan como de costumbre cuando el foco cambia en un solo control WindowsFormsHost. Los eventos Enter and Leave no se generan cuando se producen los siguientes cambios en el foco:

- Desde dentro hacia afuera de un control WindowsFormsHost.
- Desde fuera hacia adentro de un control WindowsFormsHost.
- Fuera de un control WindowsFormsHost.
- Desde un control de Windows Forms hospedado en un control WindowsFormsHost hacia un control ElementHost hospedado dentro del mismo control WindowsFormsHost.
Subprocesamiento múltiple Se admiten todas las variedades de multithreading. Tanto la tecnología Windows Forms como la tecnología WPF presuponen que existe un modelo de simultaneidad de un solo subproceso. Durante la depuración, las llamadas a objetos de framework desde otros subprocesos provocarán una excepción para aplicar este requisito.
Seguridad Todos los escenarios de interoperación requieren plena confianza. No se permite ningún escenario de interoperación con confianza parcial.
Accesibilidad Se admiten todos los escenarios de accesibilidad. Los productos de tecnología de asistencia funcionan correctamente cuando se usan para aplicaciones híbridas que contienen los controles de Windows Forms y de WPF. No 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 aplicable.
Característica de arrastrar y colocar Todas las operaciones de arrastrar y colocar funcionan como de costumbre. Esto incluye las operaciones entre los controles de Windows Forms y de WPF. No aplicable.

Hospedar controles de WPF en Windows Forms

Se admiten los siguientes escenarios de interoperación 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 con uno o varios controles hospedados de WPF.

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

  • Iniciar una ventana de WPF.

  • Hospedar un formulario principal/detalle con un formulario principal de Windows Forms y un formulario de detalle de WPF.

  • Hospedar un formulario principal/detalle con un formulario principal de WPF y un formulario de detalle de Windows Forms.

  • Hospedar controles personalizados de WPF.

  • Hospedar controles híbridos.

Propiedades ambiente

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

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

Comportamiento

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

Comportamiento Compatible No compatible
Transparencia La representación de controles de WPF admite la transparencia. El fondo del control primario de Windows Forms se puede convertir en el fondo de los controles hospedados de WPF. No aplicable.
Subprocesamiento múltiple Se admiten todas las variedades de multithreading. Tanto la tecnología Windows Forms como la tecnología WPF presuponen que existe un modelo de simultaneidad de un solo subproceso. Durante la depuración, las llamadas a objetos de framework desde otros subprocesos provocarán una excepción para aplicar este requisito.
Seguridad Todos los escenarios de interoperación requieren plena confianza. No se permite ningún escenario de interoperación con confianza parcial.
Accesibilidad Se admiten todos los escenarios de accesibilidad. Los productos de tecnología de asistencia funcionan correctamente cuando se usan para aplicaciones híbridas que contienen los controles de Windows Forms y de WPF. No 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 aplicable.
Característica de arrastrar y colocar Todas las operaciones de arrastrar y colocar funcionan como de costumbre. Esto incluye las operaciones entre los controles de Windows Forms y de WPF. No es aplicable.

Consulte también