【问题标题】:Detect changes in SystemParameters.HighContrast in .NET 4.0检测 .NET 4.0 中 SystemParameters.HighContrast 的变化
【发布时间】:2015-05-06 00:38:05
【问题描述】:

在 .NET 4.5 中,我可以使用:

        SystemParameters.StaticPropertyChanged += SystemParameters_StaticPropertyChanged;

但这在 .NET 4.0 中不受支持。但是,SystemParameters 确实可以访问 HighContrast 值和 HighContrastKey ResourceKey。如何监视 ResourceKey 的值的更改,以便我可以模仿 PropertyChanged 事件?我知道 XAML 中的 DynamicResource 可以做到这一点,但这需要在后面的代码中完成。

是否可以仅使用 C# 而不是 XAML 来检测 ResourceKey 值的变化?

更新 我不能使用 .NET 4.5 的原因是 (1) XP 不受支持,并且 (2) 我的安装程序坚持他需要检测并安装 4.5.2(不是 4.5 或4.51),这意味着所有操作系统都必须安装 .NET。呃。

【问题讨论】:

  • 不完全监控 ResourceKey,但是当用户设置更改时,SystemEvents.UserPreferenceChanged 事件将被触发。如果用户更改为高对比度模式,则 UserPreferenceChangedEventArgs 的类别将为 Accessibility。
  • 你的答案是 Szabolcs 是最好的

标签: c# .net wpf xaml .net-4.0


【解决方案1】:

您可以使用代码here 来使用 WMI 监视注册表项更改。您只需要弄清楚哪些键对应于主题值。您可以使用注册表项更改作为检查您要查找的属性的信号。

【讨论】:

    【解决方案2】:

    我建议利用它在 WPF 中是 DynamicResource 的事实并采取相应的行动。基本上,

    1. 使用更改的处理程序创建 DependencyProperty
    2. 将该属性绑定到HighContrastKey(如果通过代码执行此操作,请参阅How to assign a dynamic resource style in code?

    然后,当它发生变化时,您可以触发任何必要的操作。

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2010-11-05
      • 2015-02-12
      • 2015-08-27
      • 2010-09-21
      • 1970-01-01
      • 2021-06-17
      • 2021-06-07
      相关资源
      最近更新 更多