C#检测重音颜色更改WinRT XAML

我正在尝试检测Application.Resources资源字典中的更改,因此我可以在更新时自动将Titlebar更改为Accent Color。 所有XAML控件和元素都会自动更改,并且在将纯色画笔设置为DSDFS画笔的地址时,其内部值会更改。

这是我尝试用来检测更改的代码:

public static DependencyProperty accent = DependencyProperty.Register("DictChange", typeof(ResourceDictionary), typeof(Shell), new PropertyMetadata(Application.Current.Resources, new PropertyChangedCallback(accent_PropertyChanged))); public ResourceDictionary DictChange { get { return (ResourceDictionary)GetValue(accent); } set { SetValue(accent, value); } } private static void accent_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { _app.SetTitlebar(); } 

我假设它错了,或者我不确定检测更改是否正确。 之前的迭代中,我使用Application.Current.Resources["SystemControlBackgroundAccentBrush"] as SolidColorBrush并尝试检测其属性,但这也无效。

我究竟做错了什么? 请帮忙 :)

这可能没错,但它可能不是最好的解决方案。

在WinRT XAML中,我们有了这个新的ThemeResource ,可以自动更新资源。 棘手的一点是找到一种方法将ApplicationView.GetForCurrentView().TitleBar.BackgroundColor绑定到SystemControlBackgroundAccentBrush

在我对这个问题的回答中 ,我创建了一个将自定义 TitleBar附加到页面的行为。 如果您将Background属性修改为这样的 –

  

现在运行应用程序 ,当您更改系统的accent color时,您将看到背景颜色已更新,如下图所示 –

在此处输入图像描述

基本上在你的情况下,你只需要创建一个类似的(&simpler?) Behavior ,它就像一个桥梁,通过ThemeResource绑定将TitleBarBackgroundColor链接到SystemControlBackgroundAccentBrush

希望这可以帮助!

我假设它错了,或者我不确定检测更改是否正确。

您无法通过注册DependencyProperty来检测资源字典中的键值更改,因为ResourceDictionay不是ObservableCollection类 。 在此处输入图像描述

没有内置支持来检测资源字典中的键值更改。

作为一种变通方法,您可以考虑创建一个内部可观察集合来检测更改。