Темная тема Windows Forms. Вопрос от начинающего программиста
Сразу перейду к делу. Задача: я хочу добавить в свое приложение темную тему. Проблема: как узнать какая тема установлена в системе(Windows 10)? Как узнать что тема системы была изменена?
PS: насколько я понял, смена цвета всех элементов происходит "вручную", то есть мне нужно самому прописать что и как должно изменится при смене темы. Если нет, то, пожалуйста, исправьте меня. Также буду благодарен за любую информацию по данной теме.
Ответы (1 шт):
Windows Forms не поддерживает смену тем ОС, как и любое Win32 приложение, например WPF.
Смену тем поддерживают только WinRT приложения, например UWP, либо совместимые с WinRT приложения типа Windows App SDK / WinUI 3, при чем нативно.
То есть, в совместимых приложениях цвет UI меняется автоматически, и ничего для этого дополнительно в коде писать не нужно.
Вы конечно можете сами написать внутри WinForms приложения менялку тем и сами написать перекрашивание интерфейса, но это никак не будет интегрировано с операционной системой. Win32 API не предоставляет никаких сервисов, чтобы взаимодействовать с системными темами.
UPD: Изменения темы для приложений можно узнать в реестре HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize, ключ AppsUseLightTheme, а изменение можно отслеживать перехватывая Windows сообщение WM_SETTINGCHANGE. Для этого надо вклиниться в работу WndProc, с этим вам может помочь реализация интерфейса IMessageFilter.