在WPF中检测系统主题更改
|
对于WPF应用程序,我需要检测DWM何时打开/关闭或系统主题何时更改。
WinForms中有这样的事件,但是我在WPF中看不到任何事件。
没有找到相关结果
已邀请:
3 个回复
疼嘶桐
事件的原因)。也就是说,当切换DWM和更改主题时,Windows会将消息发送到所有窗口,并且您仍然可以从WPF层深入到低级别以访问这些消息并相应地操纵WPF控件。 作为窗口的window3ѭ事件的一部分,将窗口过程附加到WPF窗口的HWND(窗口句柄)。在您的窗口过程中,分别处理
和
窗口消息。 这是一个简单的示例(根据我的问题改编了样板代码):
绊伦欧
感秆暴壳
对于Aero颜色主题,SystemEvents.UserPreferenceChanged事件也适用(感谢您!):
正如您在上面看到的,它远非直观。航空颜色更改会触发\'General \'偏好更改事件,即使还有很多更适合的选项,例如\'VisualStyle \'等。 如果要更彻底,则应将保存的DWM颜色与当前DWM颜色进行比较,以确保确实是触发此事件的Aero颜色主题(使用DwmGetColorizationParameters API调用),而不是其他事件。请参阅以下有关如何检索Aero颜色的答案: 获取Windows 8自动颜色主题的活动颜色