У меня есть приложение WinForms, встроенное в .NET Core 3.1, которое отлично работает на дисплеях с высоким разрешением. Моя проблема заключается в том, что всякий раз, когда в Windows добавляется или удаляется новый дисплей, формы снова приобретают этот нечеткий вид. Перезапуск приложения решает эту проблему, но я хотел бы соответствующим образом перерисовывать формы всякий раз, когда это происходит.
Я думаю, что уже нашел подходящее системное событие для подписки, но я просто не могу правильно перерисовать/перерисовать формы.
Подписка на событие Windows DisplaySettingsChanged выглядит так:
using Microsoft.Win32;
(...)
SystemEvents.DisplaySettingsChanged += new EventHandler(UpdateDpiOnOpenForms);
А затем добавил метод обработчика событий, который я не мог заставить работать:
public static void UpdateDpiOnOpenForms(object sender, EventArgs e)
{
foreach (Form f in Application.OpenForms)
{
//What would the correct command be here?
}
}
Как заставить все открытые формы перерисовываться/перерисовываться с использованием новых настроек высокого разрешения по умолчанию, как это делается после запуска приложения?
RescaleConstantsForDpi()
,OnGetDpiScaledSize()
, OnDpiChanged() иOnDpiChangedAfterParent
,OnDpiChangedBeforeParent
из Control. Кроме того,DpiChanged
и другие связанные события. -- Как вы установили DpiAwareness вашего приложения? - person Jimi   schedule 16.02.2021app.config
не рассматривается в .Net Core.app.manifest
является и переопределяет любойApplication.SetHighDpiMode()
. В идеале вы должны установитьHighDpiMode.PerMonitorV2
, который ограничен некоторыми более новыми версиями Windows 10. Если вы планируете поддерживать больше версий системы, это необходимо указать в файлеapp.manifest
. Довольно сложно все время делать все правильно (в основном потому, что этот вопрос по своей сути не решен). См.: Установка поддержки DPI по умолчанию для процесса, [...] - person Jimi   schedule 16.02.2021UI
выдает его). Тестируйте много. - person Jimi   schedule 16.02.2021Important
, если вы переключите селектор версии на .Net 5. - person Jimi   schedule 16.02.2021HighDpiMode.PerMonitorV2
. ПЛЮС приложение, разработанное для поддержки масштабирования Dpi. - person Jimi   schedule 16.02.2021