[英]C# Detect Accent Colour Changes 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
。
在我回答這個問題 ,我創建了一個Behavior
,重視自定義 TitleBar
的頁面。 如果您將Background
屬性修改為這樣的 -
<local:FullScreenModeTitleBarBehavior Background="{ThemeResource SystemControlBackgroundAccentBrush}" />
現在運行應用程序 ,當您更改系統的accent color
時,您將看到背景顏色更新,如下圖所示 -
基本上在你的情況下,你只需要創建一個類似的(&simpler?) Behavior
,它就像一個橋梁,通過ThemeResource
綁定將TitleBar
的BackgroundColor
鏈接到SystemControlBackgroundAccentBrush
。
希望這可以幫助!
我假設它錯了,或者我不確定檢測更改是否正確。
您無法通過注冊DependencyProperty來檢測資源字典中的鍵值更改,因為ResourceDictionay不是ObservableCollection類 。
沒有內置支持來檢測資源字典中的鍵值更改。
作為一種變通方法,您可以考慮創建一個內部可觀察集合來檢測更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.