2010-03-15 19 views
7

Los formularios de mi aplicación .NET (VB.NET 3.5 si realmente debe saberlo) no se formatean correctamente cuando se procesan con una configuración de PPP alta. Todas las soluciones que he encontrado hasta ahora simplemente explican la causa del problema ya que "ciertos elementos de la IU no se escalan correctamente". Me preguntaba si alguien tenía una explicación más significativa. ¡Gracias!¿Por qué .NET winforms escalar incorrectamente en la configuración de DPI?

Respuesta

10

Básicamente, el problema es que GDI + (y, por extensión, Windows Forms) utiliza píxeles del dispositivo como su unidad de medida predeterminada. Cuando cambia la configuración de PPP, el tamaño físico de un píxel en realidad no cambia (un píxel es un píxel), pero las fuentes y las imágenes que se miden en tamaños que no sean píxeles se escalan en consecuencia. Windows Forms intenta acomodar esto lo mejor que puede haciendo más espacio para el diseño, pero la única solución verdadera es utilizar un sistema de medición que no esté basado en píxeles. Esto es lo que hace WPF.

En WPF, a 96 ppp, un píxel independiente del dispositivo corresponde al mismo tamaño que un píxel físico. Pero cuando cambia el DPI del sistema, WPF escala el sistema de coordenadas virtuales a nivel mundial. La aplicación, los controles, etc. no tienen idea de que ya no se están alineando con los píxeles físicos. De hecho, esto a veces puede causar problemas de alias en WPF, pero casi nunca tiene que preocuparse de que el diseño de la aplicación sea diferente en una configuración DPI diferente.

Una cosa que puede hacer para minimizar el problema en Windows Forms es usar los paneles de diseño "nuevo" (como .NET 2.0) como TableLayoutPanel, FlowLayoutPanel, etc. Utilice Anchor, Dock y AutoSize siempre que sea posible. Esto permitirá que los formularios de Windows vuelvan a su interfaz de usuario de la mejor manera posible.

También tenga en cuenta que si crea formularios en un DPI no estándar, Windows Forms utilizará esto como el tamaño "base". Casi siempre arruina las cosas. Intente usar 96 DPI para diseñar sus formularios.

Cuestiones relacionadas