Поделиться через


Устранение проблем с HDPI и масштабированием с помощью конструктора Windows Forms в Visual Studio

Из этой статьи вы узнаете, как устранить проблемы с отрисовкой из-за ограничений масштабирования конструктора Windows Forms на мониторах HDPI, запустив Visual Studio в качестве неузнательного процесса DPI. HDPI обозначает высокие точки на дюйм, с каждой точкой, представляющей физический пиксель устройства.

Более высокая плотность пикселей создает более острые изображения и правильно отображает элементы масштабирования. Без правильного масштабирования элементы пользовательского интерфейса и текст слишком крошечны для эффективного использования и могут перекрываться. Чтобы устранить эту проблему, Windows автоматически масштабирует процентиль пользовательского интерфейса в соответствии с параметром DPI. Например, параметр DPI 100 % представляет 96 DPI, а 125 % — 120 DPI. Мониторы, используемые для доставки с 96 пикселей на дюйм, которые Windows используется в качестве базового плана для рисования 100 % растрового рисунка. Тем не менее, как технология отображения расширена, мониторы теперь поставляются с панелями 300 DPI или более поздней.

Когда приложение объявляет себя с поддержкой DPI, это оператор, указывающий, что приложение работает хорошо с более высокими параметрами DPI, и поэтому Windows может применять автомасштабирование. И наоборот, приложения, не знают от DPI, отрисовываются по фиксированному значению DPI в 96 пикселей на дюйм или 100 %, и поэтому автоматическое масштабирование не применяется.

Конструктор Windows Forms не знает о DPI

Примечание.

В Visual Studio 2022 версии 17.8 или более поздней версии можно избежать проблем, описанных в этой статье. Visual Studio 2022 версии 17.8 обеспечивает поддержку неузнаваемых вкладок DPI в приложении с поддержкой DPI. См . улучшения DPI Visual Studio. Это позволяет разрабатывать Windows Forms для неузнаемых контекстов DPI, не требуя запуска Visual Studio в режиме неузнательного DPI. Чтобы использовать этот параметр в проекте Windows Forms, задайте для свойства ForceDesignerDPIUnaware true значение в файле проекта:

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

По умолчанию Visual Studio — это приложение с поддержкой точек на дюйм (DPI), что означает автоматическое масштабирование дисплея. Однако конструктор Windows Forms — это неузнанное от DPI приложение, поэтому оно отображается как растровое изображение на 96 DPI. Без поддержки автомасштабирования проблемы и перекрытия возникают при открытии форм на мониторах HDPI, как показано на этом изображении:

Screenshot of Windows Forms Designer on HDPI monitor that shows issues due to lack of autoscaling support.

При открытии формы в конструкторе Windows Forms на мониторе HDPI Visual Studio отображает информационную панель, которая отображает текущий процент масштабирования монитора (например, 150%/144 DPI), возможность перезапуска Visual Studio на 100 % масштабирования для сопоставления конструктора Windows Forms и дополнительных сведений. Перезапуск при масштабировании на 100 % делает vs DPI неясным, что позволяет обеспечить правильную отрисовку без перекрытия.

Screenshot of the information bar in Visual Studio to restart in DPI-unaware mode.

Совет

  1. Если вы закрыли информационную панель и хотите перезапустить Visual Studio, так как DPI не известно, используйте средство DevEnv.exe.
  2. Если вы не работаете в конструкторе, вы можете игнорировать информационную панель. Вы также можете отключить уведомления , чтобы панель сведений не отображалась.

Перезапуск Visual Studio без поддержки DPI

Рекомендуемое решение для устранения этих проблем пользовательского интерфейса заключается в перезапуске Visual Studio в качестве неузнательного процесса DPI, что означает, что он перезапускается при масштабировании на 100 % (96 DPI).

Чтобы переключиться на DPI-неузнаемые:

  • Выберите параметр "Перезапустить Visual Studio с масштабированием на 100 %" на желтой панели сведений, которая отображается при открытии формы в конструкторе Windows Forms.

Важно перезапустить Visual Studio, чтобы вернуть его по умолчанию в качестве процесса, поддерживающего DPI, после завершения работы в конструкторе Windows Forms.

Чтобы вернуться к поддержке DPI, выполните следующее:

  • Закройте и снова откройте Visual Studio, чтобы снова вернуться к поддержке DPI. Кроме того, в информационной строке выберите параметр перезапуска Visual Studio в качестве параметра процесса , поддерживающего DPI.

Когда Visual Studio запускается как DPI-не знаю, проблемы макета конструктора устраняются, однако шрифты могут отображаться размытыми и проблемы могут отображаться в других конструкторах, таких как конструктор XAML. Visual Studio отображает другое информационное сообщение, когда DPI не знает, что "Visual Studio работает в качестве неузнательного процесса DPI. Конструкторы WPF и XAML могут не отображаться правильно".

Примечание.

Примечание.

  • Если после выбора параметра перезапустить Visual Studio в качестве неузнательного процесса, положение окон инструментов может измениться.
  • Профиль Visual Basic по умолчанию не будет повторно открывать проекты при перезапуске Visual Studio в качестве неузнательного процесса DPI. Вместо этого получите доступ к проекту с помощью последних проектов и решений.>

Использование Windows для установки масштабирования дисплея до 100 %

Чтобы избежать использования Visual Studio для переключения масштабирования отображения, настройте масштабирование в параметрах Windows. Например, в Windows 11 можно задать масштабирование до 100 % (96 DPI).

Для этого введите параметры отображения в поле поиска панели задач и выберите пункт "Изменить параметры отображения". В окне Параметры задайте параметру Изменить размер текста, приложений и других элементов значение 100 %. Помните, что масштабирование на 100 % (96 DPI) может сделать пользовательский интерфейс слишком небольшим для практического использования.

Отключение масштабирования с помощью средства командной строки DevEnv

Чтобы управлять параметрами отображения с помощью средств командной строки, а не средств пользовательского интерфейса (пользовательского интерфейса), используйте DevEnv.exe. Команда devenv.exe принимает /noscale в качестве параметра командной строки для выполнения в режиме масштабирования 100 %. Вот как это использовать:

  1. В строке меню Visual Studio выберите Инструменты>Командная строка>Командная строка разработчика.
  2. Затем введите devenv /noScale.

Другие варианты

Помимо указанных выше вариантов упоминание, можно также попробовать следующие варианты:

Устранение неполадок

Если переход на уровень осведомленности о DPI не работает в Visual Studio, убедитесь dpiAwareness , что значение отсутствует в подразделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe в редакторе реестра. Удалите значение, если оно присутствует.