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
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.
- 1. Cómo controlar la fuente DPI en la aplicación .NET WinForms
- 2. C# WinForms inhabilita la escala de DPI
- 3. Guardar configuración en una aplicación .NET WinForms
- 4. La configuración de Windows DPI afecta Graphics.DrawString
- 5. C# winforms: ¿Cómo cambiar DPI del System.Drawing.BItmap?
- 6. Al usar el diseñador de WinForms, ¿siempre necesito tener el DPI configurado en 96?
- 7. ¿Qué método de configuración prefiere en .net? ¿Por qué?
- 8. ¿Puedo establecer la resolución de DPI de mi aplicación Java Swing sin cambiar la configuración de DPI del sistema?
- 9. Configuración de DPI para archivos PNG
- 10. ¿Por qué Python evalúa esta expresión incorrectamente?
- 11. ¿Por qué -writeImageToSavedPhotosAlbum orienta mi imagen incorrectamente?
- 12. ¿Por qué mi número se redondea incorrectamente?
- 13. ¿Cómo obtener DPI en C# .NET?
- 14. ¿Por qué falla la configuración de un Winforms DateTimePicker en DateTime.MinValue?
- 15. Encriptación de contraseñas en WinForms app.config, .NET
- 16. Falta el título en la ventana de herramienta de WPF cuando la configuración DPI 125-150%
- 17. Botón dividir en .NET Winforms
- 18. ¿Qué significa 'useLegacyV2RuntimeActivationPolicy' en la configuración de .NET 4?
- 19. ¿Por qué esta sobrecarga de constructor se resuelve incorrectamente?
- 20. de Configuración de la impresora en .NET
- 21. Creando un botón de imagen en la aplicación .NET Winforms
- 22. ¿Por qué node.js maneja setTimeout (func, 1.0) incorrectamente?
- 23. ¿Cómo acceder a la configuración de DPI de la pantalla a través de javascript?
- 24. WindowLicker para WinForms de .NET?
- 25. ¿Por qué C imprime mis valores hexadecimales incorrectamente?
- 26. ¿Por qué este initializer_list se comporta incorrectamente al pasar cadenas?
- 27. ¿Cómo se admite la configuración personalizada de DPI de escritorio en aplicaciones Delphi 7?
- 28. ¿Cómo funciona SetUnhandledExceptionFilter en aplicaciones .NET WinForms?
- 29. Ejemplos de aplicaciones rápidas .NET WPF/WinForms?
- 30. Cómo acelerar .NET winforms rendering