Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describe cómo interactúa el elemento WindowsFormsHost con el sistema de diseño de WPF.
WPF y Windows Forms admiten lógicas diferentes, pero similares, para dimensionar y colocar los elementos en un formulario o una página. Cuando se crea una interfaz de usuario híbrida que hospeda controles de Windows Forms en WPF, el elemento WindowsFormsHost integra los dos esquemas del diseño.
Diferencias de diseño entre WPF y Windows Forms
WPF utiliza un diseño independiente de la resolución. Todas las dimensiones de diseño de WPF se especifican mediante píxeles independientes del dispositivo. Un píxel independiente del dispositivo tiene un tamaño de 1/96 de pulgada y es independiente de la resolución, por lo que obtiene resultados similares independientemente de si se representa en un monitor de 72 ppp o en una impresora de 19.200 ppp.
WPF también se basa en el diseño dinámico. Esto significa que un elemento de la interfaz de usuario se organiza en un formulario o una página según su contenido, su contenedor de diseño primario y el tamaño de pantalla disponible. El diseño dinámico facilita la localización ajustando automáticamente el tamaño y la posición de los elementos de la interfaz de usuario cuando cambia la longitud de las cadenas que contienen.
En Windows Forms, el diseño es dependiente del dispositivo y tiene mayor probabilidad de ser estático. Normalmente, los controles de Windows Forms se colocan de manera absoluta en el formulario utilizando dimensiones especificadas en píxeles de hardware. Sin embargo, Windows Forms admite algunas características de diseño dinámico, que se resumen en la tabla siguiente.
Característica de diseño |
Descripción |
---|---|
Ajuste automático de tamaño |
Algunos controles de Windows Forms ajustan su tamaño para mostrar correctamente el contenido. Para obtener más información, consulte Información general sobre la propiedad AutoSize. |
Delimitación y acoplamiento |
Los controles de Windows Forms permiten la colocación y el dimensionamiento basados en el contenedor primario. Para obtener más información, vea Control.Anchor y Control.Dock. |
Ajuste automático de escala |
Los controles contenedores ajustan su tamaño y el de sus elementos secundarios de acuerdo con la resolución del dispositivo de salida o con el tamaño, en píxeles, de la fuente del contenedor predeterminada. Para obtener más información, consulte Ajuste automático de escala en formularios Windows Forms. |
Contenedores de diseño |
Los controles FlowLayoutPanel y TableLayoutPanel organizan sus controles secundarios y ajustan su tamaño de acuerdo con su contenido. |
Limitaciones de diseño
En general, no es posible ajustar la escala de los controles de Windows Forms ni transformarlos en la misma medida que los de WPF. En la lista siguiente se describen las limitaciones conocidas cuando el elemento WindowsFormsHost intenta integrar su control 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 donde 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. El elemento WindowsFormsHost provoca el evento LayoutError si se aplica una transformación de sesgo o giro. Si no controla el evento LayoutError, se inicia una excepción InvalidOperationException.
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. Además, no puede reducir el tamaño de los controles de Windows Forms a 0 píxeles.
Los controles de Windows Forms admiten el ajuste de escala automático, según el cual el formulario cambiará automáticamente su propio tamaño y el de sus controles de acuerdo con 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.
Orden z
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.
Un control de Windows Forms hospedado también se dibuja encima de todos los elementos Adorner.
Comportamiento de diseño
En las secciones siguientes se describen aspectos concretos del comportamiento de diseño al hospedar controles de Windows Forms en WPF.
Ajuste de escala, conversión de unidades e independencia del dispositivo
Siempre que el elemento WindowsFormsHost realiza operaciones que implican dimensiones de WPF y Windows Forms, se utilizan dos sistemas de coordenadas: los píxeles independientes del dispositivo para WPF y los píxeles de hardware para Windows Forms. Por consiguiente, debe aplicar las conversiones de unidades y escala apropiadas para lograr un diseño coherente.
La conversión entre los sistemas de coordenadas depende de la resolución del dispositivo actual y de cualquier transformación de diseño o representación que se aplique al elemento WindowsFormsHost o a sus antecesores.
Si el dispositivo de salida es de 96 ppp y no se aplica ningún ajuste de escala al elemento WindowsFormsHost, un píxel independiente del dispositivo es igual a un píxel de hardware.
En todos los demás casos es preciso ajustar la escala del sistema de coordenadas. El tamaño del control hospedado no cambia. En su lugar, el elemento WindowsFormsHost intenta ajustar la escala del control hospedado y de todos sus controles secundarios. Dado que Windows Forms no admite plenamente el ajuste de escala, la escala del elemento WindowsFormsHost se ajusta en la medida en que lo admitan los distintos controles concretos.
Invalide el método ScaleChild para proporcionar un comportamiento de ajuste de escala personalizado para el control hospedado de Windows Forms.
Además del ajuste de la escala, el elemento WindowsFormsHost controla los casos de redondeo y desbordamiento tal y como se describe en la tabla siguiente.
Problema de conversión |
Descripción |
---|---|
Redondeo |
Las dimensiones de WPF en píxeles independientes del dispositivo se especifican como double, y las dimensiones de Windows Forms en píxeles de hardware se especifican como int. En los casos en que se convierten dimensiones basadas en el tipo double en dimensiones basadas en el tipo int, el elemento WindowsFormsHost utiliza el redondeo estándar, para que los valores fraccionarios menores que 0,5 se redondeen a 0. |
Desbordamiento |
Cuando el elemento WindowsFormsHost convierte valores double en valores int, es posible que se produzca desbordamiento. Los valores mayores que MaxValue se establecen en MaxValue. |
Propiedades relacionadas con el diseño
El elemento WindowsFormsHost asigna correctamente las propiedades que controlan el comportamiento de diseño de los controles de Windows Forms y los elementos de WPF. Para obtener más información, consulte Asignación de propiedades en formularios Windows Forms y WPF.
Cambios de diseño en el control hospedado
Los cambios de diseño en los controles de Windows Forms hospedados se propagan a WPF para desencadenar actualizaciones del diseño. El método InvalidateMeasure de WindowsFormsHost garantiza que los cambios de diseño del control hospedado provoquen la ejecución del motor de diseño de WPF.
Controles de formularios Windows Forms con ajuste de tamaño continuo
Los controles de Windows Forms que admiten el ajuste de escala continuo interactúan plenamente con el sistema de diseño de WPF. El elemento WindowsFormsHost utiliza como de costumbre los métodos MeasureOverride y ArrangeOverride para ajustar el tamaño y organizar el control de Windows Forms hospedado.
Algoritmo de ajuste de tamaño
El elemento WindowsFormsHost utiliza el procedimiento siguiente para ajustar el tamaño del control hospedado:
El elemento WindowsFormsHost invalida los métodos MeasureOverride y ArrangeOverride.
Para determinar el tamaño del control hospedado, el método MeasureOverride llama al método GetPreferredSize del control hospedado con una restricción traducida a partir de la restricción pasada al método MeasureOverride.
El método ArrangeOverride intenta establecer el control hospedado en la restricción de tamaño determinada.
Si la propiedad Size del control hospedado coincide con la restricción especificada, el tamaño del control hospedado se establece en la restricción.
Si la propiedad Size no coincide con la restricción especificada, el control hospedado no admite el ajuste de tamaño continuo. Por ejemplo, el control MonthCalendar sólo permite tamaños discretos. Los tamaños permitidos para este control consisten en números enteros (que representan el número de meses) para el alto y el ancho. En casos como éste, el elemento WindowsFormsHost se comporta como sigue:
Si la propiedad Size devuelve un tamaño mayor que la restricción especificada, el elemento WindowsFormsHost recorta el control hospedado. El alto y el ancho se controlan por separado, de manera que el control hospedado se puede recortar en cualquier dirección.
Si la propiedad Size devuelve un tamaño menor que la restricción especificada, WindowsFormsHost acepta este valor de tamaño y lo devuelve al sistema de diseño de WPF.
Vea también
Tareas
Tutorial: Organizar controles de formularios Windows Forms en WPF
Referencia
Conceptos
Asignación de propiedades en formularios Windows Forms y WPF