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

时间:2015-09-17 09:06:29

标签: c# xaml windows-runtime windows-10 uwp

我正在尝试检测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并尝试检测其属性,但这也无效。

我做错了什么?请帮助:)

2 个答案:

答案 0 :(得分:8)

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

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

my answer to this question中,我创建了一个Behavior,用于将自定义 TitleBar附加到该页面。如果您将Background属性修改为类似的内容 -

<local:FullScreenModeTitleBarBehavior Background="{ThemeResource SystemControlBackgroundAccentBrush}" />

现在运行app,当您更改系统的accent color时,您会看到背景颜色已更新,如下图所示 -

enter image description here

基本上在你的情况下,你只需要创建一个类似的(&amp; simpler?)Behavior,它就像一个桥梁,将BackgroundColor的{​​{1}}链接到{{} 1}},通过TitleBar绑定。

希望这有帮助!

答案 1 :(得分:0)

  

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

由于ResourceDictionay不是ObservableCollection Class,因此无法通过注册DependencyProperty来检测资源字典中的键值更改。 enter image description here

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

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