Устранение проблем с 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, как показано на этом изображении:
При открытии формы в конструкторе Windows Forms на мониторе HDPI Visual Studio отображает информационную панель, которая отображает текущий процент масштабирования монитора (например, 150%/144 DPI), возможность перезапуска Visual Studio на 100 % масштабирования для сопоставления конструктора Windows Forms и дополнительных сведений. Перезапуск при масштабировании на 100 % делает vs DPI неясным, что позволяет обеспечить правильную отрисовку без перекрытия.
Совет
- Если вы закрыли информационную панель и хотите перезапустить Visual Studio, так как DPI не известно, используйте средство DevEnv.exe.
- Если вы не работаете в конструкторе, вы можете игнорировать информационную панель. Вы также можете отключить уведомления , чтобы панель сведений не отображалась.
Перезапуск 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. Однако проект можно открыть, выбрав его в разделе Файл>Последние проекты и решения.
Примечание.
- Если после выбора параметра перезапустить 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 %. Вот как это использовать:
- В строке меню Visual Studio выберите Инструменты>Командная строка>Командная строка разработчика.
- Затем введите
devenv /noScale
.
Другие варианты
Помимо указанных выше вариантов упоминание, можно также попробовать следующие варианты:
Выбрать параметр Оптимизировать отображение для экранов с другой плотностью пикселей (требуется перезапуск)
Отключите уведомления о масштабировании в Visual Studio, например, если вы не работаете в конструкторе. Вот как отключить уведомления:
- Выберите Сервис>Параметры, чтобы открыть диалоговое окно Параметры.
- В диалоговом окне Параметры выберите Конструктор Windows Forms>Общие и установите для параметра Уведомления о масштабировании DPI значение False.
Устранение неполадок
Если переход на уровень осведомленности о DPI не работает в Visual Studio, убедитесь dpiAwareness
, что значение отсутствует в подразделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe в редакторе реестра. Удалите значение, если оно присутствует.