#winforms #.net-4.7.2 #hidpi
Вопрос:
(Нет, я пока не могу обновить эту кодовую базу до .NET Core или более новой версии.)
У меня есть приложение, которое в основном представляет собой Windows Forms и частично WPF. Когда размер шрифта изменяется во время выполнения, WPF реагирует правильно. Вместо этого Windows Forms, похоже, даже не осознает, что что-то изменилось, пока я не перезапущусь. Например, Control.DeviceDpi
свойство (которое даже не было введено до версии 4.7) показывает значение, которое было точным при запуске, а не текущее.
У моего app.manifest
есть:
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True/PM</dpiAware>
</asmv3:windowsSettings>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
<dpiAwareness>PerMonitorV2, PerMonitor</dpiAwareness>
</asmv3:windowsSettings>
</asmv3:application>
У моего app.config
есть:
<appSettings>
<add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
</appSettings>
Но 4,7 ввел Control.DpiChanged
событие, только оно, кажется, никогда не срабатывает.
Тем не менее, если я перекрываю WndProc
и слушаю WM_DPICHANGED
, это срабатывает. Этот код, по-видимому, предполагает, что событие должно сработать.
По-видимому, это не так, потому что этот код условно отключает его. Но я не уверен, на какую часть я не претендую. (Я использую Windows 10 21H1, поэтому она более свежая, чем RS2.)
Комментарии:
1. Используйте .Net Framework 4.8 и переместите настройки PerMonitorV2 в
app.config
. Он работает только в Windows 10 (так как это вызывает GetThreadDpiAwarenessContext ). — Автоматическое изменение размера в стиле WPF-это… незавершенная работа 🙂2. DpiChanged формально не имеет документов. Он даже был удален из индекса ссылочного источника, они действительно имели это в виду. В любом случае нет реального смысла пытаться использовать его, вместо этого отдавайте предпочтение документированным событиям (DpiChangedBefore/AfterParent). Требуется версия Win10 1703 (апрель 2017).