Corrección de problemas de escalado y HDPI con el Diseñador de Windows Forms en Visual Studio
En este artículo, aprenderá a resolver los problemas de representación debidos a las limitaciones de escalado del Diseñador de Windows Forms en monitores HDPI que ejecutan Visual Studio como un proceso sin reconocimiento de PPP. HDPI significa puntos elevados por pulgada (high dots per inch), y cada punto representa el píxel de un dispositivo físico.
Una mayor densidad de píxeles crea imágenes más nítidas, y el escalado de pantalla dimensiona los elementos adecuadamente. Sin el escalado adecuado, los elementos y el texto de la interfaz de usuario (UI) serían demasiado pequeños para usarse de forma eficaz y podrían superponerse. Para ayudar a solucionar este problema, Windows escala automáticamente el percentil de la interfaz de usuario para que coincida con la configuración de PPP. Por ejemplo, una configuración de PPP del 100 % representa 96 PPP y del 125 % 120 PPP. Los monitores solían venir con 96 píxeles por pulgada, que Windows utilizaba como referencia para el dibujo de mapas de bits al 100 %. Sin embargo, como la tecnología de pantalla ha avanzado, los monitores incluyen ahora paneles de 300 PPP o superior.
Cuando una aplicación se declara con reconocimiento de PPP, especifica que se comporta bien en una configuración de PPP superior y, por lo tanto, Windows puede aplicar la escalabilidad automática. Por el contrario, las aplicaciones sin reconocimiento de PPP se representan con un valor de PPP fijo de 96 píxeles por pulgada, o del 100 %, por lo que no se aplica la escalabilidad automática.
El Diseñador de Windows Forms no tiene reconocimiento de PPP
Nota:
En Visual Studio 2022, versión 17.8 o posterior, puede evitar los problemas descritos en este artículo. Visual Studio 2022, versión 17.8, proporciona compatibilidad con pestañas sin reconocimiento de PPP dentro de una aplicación con reconocimiento de PPP. Consulte Mejoras de PPP de Visual Studio. Esto le permite diseñar Windows Forms para contextos sin reconocimiento de PPP, sin necesidad de ejecutar Visual Studio en modo sin reconocimiento de PPP. Para usar esta configuración en un proyecto de Windows Forms, establezca la propiedad ForceDesignerDPIUnaware
en true
en el archivo del proyecto:
<PropertyGroup>
...
<ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>
De forma predeterminada, Visual Studio es una aplicación con reconocimiento de puntos por pulgada (PPP), lo que significa que la pantalla se ajusta automáticamente. Sin embargo, el Diseñador de Windows Forms es una aplicación sin reconocimiento de PPP, por lo que aparece como un mapa de bits con 96 PPP. La falta de compatibilidad con la escalabilidad automática ocasiona problemas y superposiciones al abrir formularios en monitores HDPI, como en esta imagen:
Al abrir un formulario en el Diseñador de Windows Forms en un monitor HDPI, Visual Studio muestra una barra de información que indica el porcentaje de escalado actual del monitor (por ejemplo, 150%/144 PPP), una opción para reiniciar Visual Studio con un escalado del 100 % para que coincida con el Diseñador de Windows Forms e información adicional. Reiniciar con un escalado del 100 % hace que VS no tenga reconocimiento de PPP, lo que permite una representación adecuada sin superposición.
Sugerencia
- Si ha cerrado la barra de información y quiere reiniciar Visual Studio con reconocimiento de PPP, use la herramienta DevEnv.exe.
- Si no está trabajando en el diseñador, puede omitir la barra de información. También puede deshabilitar las notificaciones para que la barra de información deje de aparecer.
Reiniciar Visual Studio como un proceso sin reconocimiento de PPP
La solución recomendada para resolver estos problemas de la interfaz de usuario es reiniciar Visual Studio como un proceso sin reconocimiento de PPP, lo que significa que se reinicia con un escalado del 100 % (96 PPP).
Para cambiar a sin reconocimiento de PPP:
- Seleccione la opción "Reiniciar Visual Studio con escalado del 100 % en la barra de información amarilla que aparece al abrir un formulario en el Diseñador de Windows Forms.
Cuando termine de trabajar en el Diseñador de Windows Forms, es importante reiniciar Visual Studio para volver a su estado predeterminado como un proceso con reconocimiento de PPP.
Para volver al reconocimiento de PPP:
- Cierre y vuelva a abrir Visual Studio para volver al reconocimiento de PPP. También puede seleccionar la opción Reiniciar Visual Studio como un proceso con reconocimiento de PPP en la barra de información.
Cuando Visual Studio se ejecuta sin reconocimiento de PPP, se resuelven los problemas de diseño del diseñador, pero las fuentes pueden aparecer borrosas y es posible que surjan problemas en otros diseñadores, como el Diseñador XAML. Visual Studio muestra un mensaje informativo diferente cuando se ejecuta sin reconocimiento de PPP que reza así: "Visual Studio se está ejecutando como un proceso sin reconocimiento de PPP". Puede que los diseñadores WPF y XAML no se muestren correctamente".
Nota:
- Si al seleccionar la opción para reiniciar Visual Studio como un proceso sin reconocimiento de PPP ha desacoplado ventanas de herramientas, puede que la posición de esas ventanas de herramientas cambie.
- Si usa el perfil de Visual Basic predeterminado, o si no tiene seleccionada la opción Guardar nuevos proyectos al crearlos en Herramientas>Opciones>Proyectos y soluciones, Visual Studio no podrá volver a abrir el proyecto cuando se reinicie como un proceso sin reconocimiento de PPP. Sin embargo, puede abrir el proyecto si lo selecciona en Archivo>Proyectos y soluciones recientes.
Nota
- Si al seleccionar la opción para reiniciar Visual Studio como un proceso sin reconocimiento de PPP se desacoplan ventanas de herramientas, puede que la posición de esas ventanas de herramientas cambie.
- El perfil predeterminado de Visual Basic no volverá a abrir proyectos cuando Visual Studio se reinicie como un proceso sin reconocimiento de PPP. En su lugar, acceda al proyecto mediante Archivo>Proyectos y soluciones recientes.
Uso de Windows para establecer el escalado de pantalla en el 100 %
Para evitar el uso de Visual Studio para alternar el escalado de pantalla, ajuste el escalado en la configuración de Windows. Por ejemplo, en Windows 11, puede establecer el escalado en 100 % (96 PPP).
Para ello, escriba configuración de pantalla en el cuadro de búsqueda de la barra de tareas y, después, seleccione Cambiar configuración de pantalla. En la ventana Configuración, establezca Cambiar el tamaño del texto, las aplicaciones y otros elementos en 100 % . Tenga en cuenta que el escalado del 100 % (96 PPP) puede hacer que la interfaz de usuario sea poco práctica por su tamaño demasiado pequeño.
Deshabilitación del escalado mediante la herramienta de línea de comandos DevEnv
Para administrar la configuración de pantalla mediante herramientas de línea de comandos en lugar de con las herramientas de interfaz de usuario, use DevEnv.exe. El comando devenv.exe
toma /noscale
como parámetro de línea de comandos para ejecutarse en modo de escalado del 100 %. Aquí se muestra cómo usarlo:
- Seleccione Herramientas>Línea de comandos>Símbolo del sistema para desarrolladores en el menú de comandos de Visual Studio.
- A continuación, escriba
devenv /noScale
.
Otras opciones
Además de las mencionadas anteriormente, también puede probar las opciones siguientes:
Seleccione la opción Optimizar la representación de las pantallas con densidades de píxeles distintas (requiere reiniciar).
Deshabilitar las notificaciones de escalado en Visual Studio, por ejemplo, si no está trabajando en el diseñador. Aquí se muestra cómo deshabilitar las notificaciones:
- Elija Herramientas>Opciones para abrir el cuadro de diálogo Opciones.
- En el diálogo Opciones, elija Diseñador de Windows Forms>General y establezca Notificaciones de escalado de PPP en False.
Solucionar problemas
Si la transición de reconocimiento de PPP no funciona en Visual Studio, compruebe que el valor dpiAwareness
NO exista en la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe del Editor del Registro. Si existe, elimínelo.