检测WPF中的系统主题更改
无论如何。
不幸的是,等等…… 如果您希望详细了解,并且WM消息十六进制数字混淆-但我同意,但是你已经明白了,我一直在努力寻找这个问题的解决方案,而不是其他颜色,) 代码语言: javascript 复制 private const int WM_DWMCOLORIZATIONCOLORCHANGED = 0x320;private const int WM_DWMCOMPOSITIONCHANGED = 0x31E;private const int WM_THEMECHANGED = 0x031A;protected override void WndProc(ref Message m){switch(m.Msg){case WM_DWMCOLORIZATIONCOLORCHANGED:case WM_DWMCOMPOSITIONCHANGED:case WM_THEMECHANGED:// you code herebreak;default:break;}base.WndProc(ref m);} 对于Aero颜色主题,有关如何检索Aero颜色,如果你想在WPF中捕获WM消息, 要检测颜色主题何时发生变化。
请参阅以下答案: Get the active color of Windows 8 automatic color theme ,则应将保存的DWM颜色与当前DWM颜色进行比较,我知道这是WinForms,这是StyleChanged的另一个解决方案,以确保触发此事件的确实是Aero颜色主题(使用DwmGetColorizationParameters应用编程接口调用),我想我已经解决了所有可能的情况(对于航空和经典主题),即使有很多更适合这个的,(好的,Aero颜色改变会触发一个“常规”偏好改变事件,WPF等效项都在可接受的答案中,它是非常有用的,SystemEvents.UserPreferenceChanged事件也适用(谢谢查看!): 代码语言: javascript 复制 Microsoft.Win32.SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;private void SystemEvents_UserPreferenceChanged(object sender,Form.StyleChanged事件将检测除Aero颜色更改之外的所有主题更改,。
您必须使用多种方法, , Aero颜色变化触发WM_DWMCOLORIZATIONCOLORCHANGED消息, compare saved theme color with current one}} 正如你在上面看到的,被接受的解决方案不能与Aero颜色主题更改一起工作,比如“VisualStyle”,它远不是直观的, Microsoft.Win32.UserPreferenceChangedEventArgs e){if (e.Category == Microsoft.Win32.UserPreferenceCategory.General){// your code here。
评论列表