我有一个极端情况,其中动态资源(不允许转换器)和自定义标记扩展(仅评估一次)都无法解决问题。我想根据当前系统颜色的褪色变体创建渐变画笔。每当系统的颜色主题发生变化时,这些画笔都会自行更新,以便用户在切换到辅助功能主题时无需重新启动应用程序。
是否可以在 WPF 应用程序中在运行时检测系统颜色主题的变化?某种事件?
我有一个极端情况,其中动态资源(不允许转换器)和自定义标记扩展(仅评估一次)都无法解决问题。我想根据当前系统颜色的褪色变体创建渐变画笔。每当系统的颜色主题发生变化时,这些画笔都会自行更新,以便用户在切换到辅助功能主题时无需重新启动应用程序。
是否可以在 WPF 应用程序中在运行时检测系统颜色主题的变化?某种事件?
您可能想查看 Microsoft.Win32.SystemEvents 类。
According to this answer you should be able to use Windows Messages to change your brushes when the windows theme changes.
我在尝试检测 Visual Studio 2012 主题的变化时偶然发现了这个答案。我正在编写一个使用 WPF 用户控件的加载项,并且需要知道它何时处于深色与浅色主题中。感谢上面的 hbarck,我使用的系统事件是:
Microsoft.Win32.SystemEvents.UserPreferenceChanged += (s, e) => { DoSomething(); };
当用户在工具->选项中更改 VS 主题时单击确定时触发此事件。