Почему .NET winforms неправильно масштабируется при больших настройках DPI? - PullRequest
7 голосов
/ 15 марта 2010

Мои приложения .NET (VB.NET 3.5, если вы действительно должны знать) формы не форматируются должным образом при визуализации при высоких настройках DPI.Все исправления, которые я обнаружил, просто объясняют причину проблемы как «некоторые элементы пользовательского интерфейса не масштабируются должным образом».Мне было интересно, есть ли у кого-нибудь более значимое объяснение?Спасибо!

1 Ответ

10 голосов
/ 15 марта 2010

В основном проблема заключается в том, что GDI + (и, соответственно, Windows Forms) использует пиксели устройства в качестве единицы измерения по умолчанию. Когда вы изменяете настройку DPI, физический размер пикселя фактически не изменяется (пиксель является пикселем), но шрифты и изображения, которые измеряются в непиксельных размерах, соответственно масштабируются. Windows Forms пытается приспособиться к этому как можно лучше, предоставляя больше места для разметки, но единственное верное решение - это использовать непиксельную систему измерений повсюду. Это то, что делает WPF.

В WPF при 96 DPI независимый от устройства пиксель соответствует тому же размеру, что и физический пиксель. Но когда вы меняете DPI системы, WPF масштабирует виртуальную систему координат глобально. Приложение, элементы управления и т. Д. Не имеют представления о том, что они больше не выровнены по физическим пикселям. На самом деле это может иногда вызывать проблемы с наложением в WPF, но вам почти никогда не придется беспокоиться о том, что макет приложения отличается от настроек DPI.

Единственное, что вы можете сделать, чтобы минимизировать проблему в Windows Forms, - это использовать «новые» (начиная с .NET 2.0) панели макетов, такие как TableLayoutPanel, FlowLayoutPanel и т. Д. По возможности используйте Anchor, Dock и AutoSize. Это позволит Windows Forms переформатировать ваш пользовательский интерфейс настолько, насколько это возможно.

Также помните, что если вы создаете формы с нестандартным разрешением, Windows Forms будет использовать это как «базовый» размер. Это почти всегда портит вещи. Поэтому постарайтесь использовать 96 DPI для разработки ваших форм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...