Compartir a través de


Corrección de problemas de HiDPI/escalado con el Diseñador de Windows Forms en Visual Studio

En este artículo, aprenderá a solucionar problemas de representación debido a limitaciones de escalado del Diseñador de Windows Forms en monitores HDPI ejecutando Visual Studio como un proceso no consciente de PPP. HDPI significa puntos altos por pulgada, con cada punto que representa un píxel de dispositivo físico.

Una mayor densidad de píxeles crea imágenes más nítidas y muestra los elementos de tamaño de escalado correctamente. Sin el escalado adecuado, los elementos de la interfaz de usuario y el texto son demasiado pequeños para usar de forma eficaz y pueden superponerse. Para ayudar a solucionar este problema, Windows escala automáticamente la interfaz de usuario para que se ajuste a la configuración de puntos por pulgada (PPP). Por ejemplo, un ajuste de PPP al 100% equivale a 96 PPP y al 125% es 120 PPP. Monitores solían enviarse con 96 píxeles por pulgada, que Windows usó como punto de referencia para la representación de mapas de bits al 100%. Sin embargo, a medida que la tecnología de visualización avanzó, los monitores ahora se venden con paneles de 300 PPP o más.

Cuando una aplicación se declara que es compatible con PPP, es una instrucción que especifica que la aplicación se comporta bien en una configuración de PPP superior y, por tanto, Windows puede aplicar el escalado automático. Por el contrario, las aplicaciones sin reconocimiento de DPI se renderizan en un valor de DPI fijo de 96 píxeles por pulgada, o 100%, y por lo tanto no se aplica el escalado automático.

El Diseñador de Windows Forms no reconoce DPI

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 no compatibles con PPP dentro de una aplicación compatible con PPP. Consulte Mejoras de PPP de Visual Studio. Esto le permite diseñar formularios de Windows Forms para contextos sin sensibilidad a PPP, sin necesidad de ejecutar Visual Studio en modo no sensible a PPP. Para usar esta configuración en un proyecto de Windows Forms, establezca la propiedad ForceDesignerDPIUnawaretrue en en el archivo del proyecto:

<PropertyGroup>
  ...
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>

De forma predeterminada, Visual Studio es una aplicación compatible con puntos por pulgada (PPP), lo que significa que la pantalla se escala automáticamente. Sin embargo, el Diseñador de Windows Forms es una aplicación no compatible con DPI, por lo que se muestra como un mapa de bits a 96 PPP. Sin compatibilidad con el escalado automático, surgen problemas y superposición al abrir formularios en monitores HDPI, como en esta imagen:

Captura de pantalla del Diseñador de Windows Forms en el monitor HDPI que muestra problemas debido a la falta de compatibilidad con el escalado automático.

Al abrir un formulario en el Diseñador de Windows Forms en un monitor HDPI, Visual Studio muestra una barra de información que muestra el porcentaje de escalado actual del monitor (por ejemplo, 150%/144 PPP), una opción para reiniciar Visual Studio en 100% escalado para que coincida con el Diseñador de Windows Forms y más información. Reiniciar con un escalado del 100% hace que VS sea independiente de DPI, permitiendo una representación adecuada sin superposición.

Captura de pantalla de la barra de información en Visual Studio para reiniciar en modo no consciente de DPI.

Sugerencia

  1. Si ha cerrado la barra de información y desea reiniciar Visual Studio sin tener en cuenta el PPP, use la herramienta DevEnv.exe.
  2. 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 no siga apareciendo.

Reiniciar Visual Studio como un proceso no adaptado a DPI

La solución recomendada para resolver estos problemas de interfaz de usuario es reiniciar Visual Studio como un proceso sin soporte para PPP, lo que significa que se reinicia con un escalado del 100% (96 PPP).

Para cambiar a PPP-unware:

  • Seleccione la opción "Reiniciar Visual Studio con 100% escalamiento" en la barra de información amarilla que aparece al momento de abrir un formulario en el Diseñador de Windows Forms.

Es importante reiniciar Visual Studio para restaurar su configuración predeterminada como un proceso compatible con DPI cuando haya terminado de trabajar en el Diseñador de Windows Forms.

Para volver a ser compatible con PPP:

  • Cierre y vuelva a abrir Visual Studio para que vuelva a ser compatible con DPI. Como alternativa, seleccione la opción Reiniciar Visual Studio como proceso compatible con PPP en la barra de información.

Cuando Visual Studio se ejecuta sin conciencia de DPI, se resuelven los problemas de diseño del entorno; sin embargo, las fuentes pueden aparecer borrosas y pueden aparecer problemas en otros entornos, como el Diseñador XAML. Visual Studio muestra un mensaje informativo diferente cuando no conoce DPI que dice "Visual Studio se está ejecutando como un proceso desconocedor de DPI". Es posible que los diseñadores WPF y XAML no se muestren correctamente".

Nota:

  • Si desacopla las ventanas de herramientas después de seleccionar la opción para reiniciar Visual Studio como un proceso no consciente de PPP, es posible que cambie la posición de las ventanas de herramientas.
  • El perfil predeterminado de Visual Basic no vuelve a abrir proyectos cuando Visual Studio se reinicia como un proceso que no reconoce DPI. En su lugar, acceda a su proyecto a través de Archivo>Proyectos y soluciones recientes.

Usar Windows para establecer el escalado de pantalla en 100%

Para evitar el uso de Visual Studio para alternar el escalado de la pantalla, ajuste el escalado en la configuración de Windows. Por ejemplo, en Windows 11, puedes establecer el escalado en 100% (96 PPP).

Para ello, escriba la configuración de visualización en el cuadro de búsqueda de la barra de tareas y, a continuación, seleccione Cambiar configuración de visualización. En la ventana Configuración , establezca Cambiar el tamaño del texto, las aplicaciones y otros elementos a 100%. Tenga en cuenta que el escalado al 100% (96 PPP) puede hacer que la interfaz de usuario sea demasiado pequeña para su uso práctico.

Deshabilitar el escalado mediante la herramienta de línea de comandos DevEnv

Para administrar la configuración de visualización mediante herramientas de línea de comandos en lugar de las herramientas de interfaz de usuario (interfaz de usuario), use DevEnv.exe. El devenv.exe comando toma /noscale como parámetro de línea de comandos para ejecutarse en modo de escalado de 100%. Aquí se muestra cómo usarlo:

  1. Seleccione Herramientas>Símbolo del sistema>para desarrolladores en la barra de menús de Visual Studio.
  2. A continuación, escriba devenv /noScale.

Otras opciones

Además de las opciones mencionadas anteriormente, también puede probar las siguientes opciones:

  • Escalado automático en Formularios Windows Forms

  • Seleccione la opción Optimizar la representación para pantallas con diferentes densidades de píxeles (requiere reiniciar).

  • Deshabilite las notificaciones de escalado en Visual Studio, por ejemplo, si no está utilizando una herramienta de diseño. Aquí se muestra cómo deshabilitar las notificaciones:

    1. Abra el panel Opciones de herramientas> y expanda la sección Todas las opciones del> Diseñador de>General.

    2. En Compatibilidad con valores altos de PPP, desmarque la casilla Notificaciones de escalado de PPP.

    1. Abra el cuadro de diálogo Opciones de herramientas> y expanda la secciónGeneral del Diseñador > de Windows Forms.

    2. En Compatibilidad con valores altos de PPP, establezca la opción Notificaciones de escalado de PPP en Falso.

Troubleshoot

Si la transición de reconocimiento de PPP no funciona en Visual Studio, asegúrese de que el dpiAwareness valor NO está presente en la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe en el Editor del Registro. Elimine el valor si está presente.