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 WindowsFormsHost elemento con el sistema de diseño de WPF.
WPF y Windows Forms admiten una lógica diferente, pero similar, para cambiar el tamaño y colocar elementos en un formulario o página. Al crear una interfaz de usuario (UI) híbrida que hospeda controles de Windows Forms en WPF, el WindowsFormsHost elemento integra los dos esquemas de diseño.
Diferencias en el diseño entre WPF y Windows Forms
WPF emplea un diseño que no depende 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 es un noventa y sexto de pulgada en tamaño e independiente de la resolución, por lo que obtiene resultados similares independientemente de si se está representando 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 interfaz de usuario se organiza en un formulario o 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 al ajustar automáticamente el tamaño y la posición de los elementos de la interfaz de usuario cuando las cadenas que contienen cambian de longitud.
El diseño en Windows Forms depende del dispositivo y es más probable que sea estático. Normalmente, los controles de Windows Forms se colocan absolutamente en un formulario mediante dimensiones especificadas en píxeles de hardware. Sin embargo, Windows Forms admite algunas características de diseño dinámico, como se resume en la tabla siguiente.
| Característica de diseño | Descripción |
|---|---|
| Ajuste automático | Algunos controles de Windows Forms ajustan su tamaño para mostrar correctamente su contenido. Para obtener más información, vea Información general sobre la propiedad AutoSize. |
| Anclaje y acoplamiento | Los controles de Windows Forms admiten el posicionamiento y el ajuste de tamaño en función del contenedor primario. Para obtener más información, vea Control.Anchor y Control.Dock. |
| Escalado automático | Los controles de contenedor ajustan su tamaño, al igual que sus elementos secundarios, en función de la resolución del dispositivo de salida o del tamaño, en píxeles, de la fuente del contenedor predeterminado. Para obtener más información, consulte Escalado automático en Windows Forms. |
| Contenedores de diseño | Los controles FlowLayoutPanel y TableLayoutPanel organizan sus controles secundarios y ajustan su tamaño según su contenido. |
Limitaciones de diseño
En general, los controles de Windows Forms no se pueden escalar ni transformar en la medida de lo posible en WPF. En la lista siguiente se describen las limitaciones conocidas cuando el WindowsFormsHost elemento intenta integrar su control hospedado de Windows Forms en el sistema de diseño WPF.
En algunos casos, los controles de Windows Forms no se pueden cambiar de tamaño o solo se pueden ajustar a dimensiones específicas. Por ejemplo, un control de Windows Forms ComboBox solo admite un alto único, que se define mediante el tamaño de fuente del control. En un diseño dinámico de WPF en el que los elementos se pueden estirar verticalmente, un control hospedado ComboBox no se estirará según lo previsto.
Los controles de Windows Forms no se pueden girar ni sesgar. El elemento WindowsFormsHost genera el evento LayoutError si aplicas una transformación de inclinación o rotación. Si no controlas este LayoutError evento, se lanzará una InvalidOperationException excepción.
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, es posible que los controles secundarios y los elementos que componen el control no se redimensionen según lo esperado. Esta limitación depende de qué tan bien sea compatible cada control de Windows Forms con el escalado. Además, no se pueden reducir los controles de Windows Forms a un tamaño de 0 píxeles.
Los controles de Windows Forms admiten el escalado automático, en el que el formulario se cambiará automáticamente de tamaño y sus controles en función del tamaño de fuente. En una interfaz de usuario de WPF, cambiar el tamaño de fuente no cambia todo el diseño, aunque los elementos individuales pueden cambiar dinámicamente.
Orden Z
En una interfaz de usuario de WPF, puede cambiar el orden z de los elementos para controlar el comportamiento superpuesto. Un control hospedado de Windows Forms se dibuja en un HWND independiente, por lo que siempre se dibuja por encima de los elementos WPF.
Un control hospedado de Windows Forms también se dibuja sobre cualquier elemento Adorner.
Comportamiento de diseño
En las secciones siguientes se describen aspectos específicos del comportamiento del diseño al hospedar controles de Windows Forms en WPF.
Escalado, conversión de unidad e independencia del dispositivo
Cada vez que el WindowsFormsHost elemento realiza operaciones que implican dimensiones de WPF y Windows Forms, hay dos sistemas de coordenadas implicados: píxeles independientes del dispositivo para WPF y píxeles de hardware para Windows Forms. Por lo tanto, debe aplicar conversiones de unidades y escalado adecuadas para lograr un diseño coherente.
La conversión entre los sistemas de coordenadas depende de la resolución actual del dispositivo y de las transformaciones de diseño o representación aplicadas al WindowsFormsHost elemento o a sus antecesores.
Si el dispositivo de salida es de 96 ppp y no se ha aplicado ningún escalado al elemento WindowsFormsHost, un píxel independiente del dispositivo es igual a un píxel de hardware.
Todos los demás casos requieren el escalado del sistema de coordenadas. No se cambia el tamaño del control hospedado. En su lugar, el WindowsFormsHost elemento intenta escalar el control hospedado y todos sus controles secundarios. Dado que Windows Forms no admite completamente el escalado, el WindowsFormsHost elemento se escala hasta el grado admitido por determinados controles.
Invalide el ScaleChild método para proporcionar un comportamiento de escalado personalizado para el control hospedado de Windows Forms.
Además del escalado, el elemento WindowsFormsHost controla los casos de redondeo y desbordamiento, como se describe en la tabla siguiente.
| Problema de conversión | Descripción |
|---|---|
| Redondeo | Las dimensiones de píxeles independientes del dispositivo de WPF se especifican como double. Las dimensiones de píxeles de hardware de Windows Forms se especifican como int. En los casos en que las dimensiones basadas en double se convierten en dimensiones basadas en int, el elemento WindowsFormsHost usa el redondeo estándar, de modo que los valores fraccionarios inferiores a 0,5 se redondean hacia abajo a 0. |
| Desbordamiento | Cuando el elemento WindowsFormsHost se convierte de valores double a valores int, es posible que se produzca un desbordamiento. Los valores que son mayores que MaxValue se establecen en MaxValue. |
Propiedades relacionadas con el diseño
Las propiedades que controlan el comportamiento del diseño en los controles de Windows Forms y los elementos WPF son asignadas adecuadamente por el elemento WindowsFormsHost. Para obtener más información, vea Asignación de propiedades de Windows Forms y WPF.
Cambios de diseño en el control hospedado
Los cambios de diseño en el control hospedado de Windows Forms se propagan a WPF para desencadenar actualizaciones de diseño. El método InvalidateMeasure en WindowsFormsHost garantiza que los cambios de diseño en el control hospedado provocan que se ejecute el motor de diseño de WPF.
Controles de Windows Forms para formularios redimensionables continuamente
Controles de Windows Forms que admiten el escalado continuo interactúan completamente con el sistema de diseño WPF. El elemento WindowsFormsHost usa los métodos MeasureOverride y ArrangeOverride como de costumbre para dimensionar y organizar el control hospedado de Windows Forms.
Algoritmo de ajuste de tamaño
El WindowsFormsHost elemento usa el procedimiento siguiente para ajustar el tamaño del control hospedado:
El WindowsFormsHost elemento invalida los MeasureOverride métodos y ArrangeOverride .
Para determinar el tamaño del control hospedado, el método MeasureOverride llama al método GetPreferredSize del control hospedado utilizando una restricción que se traduce a partir de la restricción pasada al método MeasureOverride.
El ArrangeOverride método intenta establecer el control hospedado en la restricción de tamaño especificada.
Si la propiedad del Size control hospedado coincide con la restricción especificada, el control hospedado se ajusta a la restricción.
Si la Size propiedad no coincide con la restricción especificada, el control hospedado no admite el ajuste de tamaño continuo. Por ejemplo, el MonthCalendar control solo permite tamaños discretos. Los tamaños permitidos para este control constan de enteros (que representan el número de meses) para el alto y el ancho. En casos como este, el WindowsFormsHost elemento se comporta de la siguiente manera:
Si la Size propiedad devuelve un tamaño mayor que la restricción especificada, el WindowsFormsHost elemento recorta el control hospedado. El alto y el ancho se controlan por separado, por lo que el control hospedado se puede recortar en cualquier dirección.
Si la Size propiedad devuelve un tamaño menor que la restricción especificada, WindowsFormsHost acepta este valor de tamaño y devuelve el valor al sistema de diseño de WPF.
Consulte también
.NET Desktop feedback