Winforms неожиданно стали уродливыми со стилем XP, а не как в дизайнере (win10)

Вверху – то как любая форма в проекте выглядит в конструкторе; Внизу – то как после компиляции.

введите сюда описание изображения

"Исследования", которые я провёл:

  • Полностью новый проект не имеет такого "заболевания"
  • Переносил всё в новый проект, необходимо было перенести также .csproj, иначе VS не даёт запустить. Уродство сохранилось
  • При создании новой формы в проекте, она также уродлива
  • NuGet пакеты не влияют (добавлял тот же набор в новый проект, уродства не было)

Когда уродство появилось, я не заметил. По проведенным испытаниям, мне кажется, что скорее всего, дело в ресурсах или .csproj. Но я не могу просто взять и удалить ресурсы. Там же вся локализация (и текст). Csproj при удалении ItemGroup не даёт запустить проект. А ещё постоянно при каждом первом запуске (первый после любого изменения в программе, даже если я просто комментарий добавил), выдаёт ошибку "C:\Program Files\dotnet\sdk\5.0.408\Sdks\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets(221,5): error : Идентификатор пакета "SteamVR-OculusDash Switcher" содержит недопустимые символы. Примеры допустимых значений: 'MyPackage'", "'MyPackage.Sample'". При втором запуске – спокойно запускается. Проблема была и до уродства (особых неудобств не добавляет, да и не понятно, откуда она возникает). Сам проект можно скачать здесь. Помогите, пожалуйста, разобраться, как убрать урдоство или в каком направлении двигаться. Может у кого-то была похожая проблема? Факты, которые вряд ли на что-то влияют, но вдруг:

  • Проект был несколько раз переиметован. Изначальное название SteamVR_Toggle_for_Viveport

Ответы (1 шт):

Автор решения: Титан

Проблема была в том, что я не настроил Application перед запуском формы, а именно, не применил Application.EnableVisualStyles();, который и применяет привычный визуальный стиль для WinForms. Обычно, для Winforms ещё применяются

Application.SetHighDpiMode(HighDpiMode.SystemAware); // системное масштабирование
Application.SetCompatibleTextRenderingDefault(false); // Устанавливает рендеринг с помощью TextRenderer GDI. Визуальной разницы самого текста я не заметил, но при значении true, поля текста капельку увеличиваются и иногда закрывают другие элементы управления (скорее, их границы) своим фоном
→ Ссылка