【问题标题】:How to work with dynamically modified system colors?如何使用动态修改的系统颜色?
【发布时间】:2012-09-28 12:13:21
【问题描述】:
我有一个极端情况,动态资源(不允许转换器)和自定义标记扩展(只评估一次)都不能解决问题。我想根据当前系统颜色的褪色变体创建渐变画笔。每当系统的颜色主题发生变化时,这些画笔都会自行更新,这样用户在切换到辅助功能主题时无需重新启动应用程序。
是否可以在 WPF 应用程序中在运行时检测系统颜色主题的变化?某种活动?
【问题讨论】:
标签:
wpf
xaml
markup-extensions
dynamicresource
systemcolors
【解决方案1】:
根据this 的回答,您应该能够在 Windows 主题更改时使用 Windows 消息来更改画笔。
【解决方案2】:
您可能想查看 Microsoft.Win32.SystemEvents 类。
【解决方案3】:
我在尝试检测 Visual Studio 2012 主题的变化时偶然发现了这个答案。我正在编写一个使用 WPF 用户控件的加载项,并且需要知道它何时处于深色与浅色主题中。感谢上面的 hbarck,我使用的系统事件是:
Microsoft.Win32.SystemEvents.UserPreferenceChanged += (s, e) => { DoSomething(); };
当用户在 tools->options 中更改 VS 主题点击 OK 时触发此事件。