【Windows 10 應用開發】跟隨系統主題顏色


有些時候,希望應用程序中的某些顏色可以與系統的主題顏色相同,並且當系統主題色改變時進行同步。

實現過程並不復雜,主要用到 UISettings 類,它公開一個 GetColorValue 方法,訪問這個方法,可以得到指定的顏色值(用Color結構表示)。而表示要獲取顏色的類型由一個叫 UIColorType 的枚舉來約定。如下面超高清截圖所示。

可能有朋友在調用 GetColorValue 方法時會使用值 Background,其實這個值不是系統主題色,是窗口的背景色,默認情況返回的都是白色。系統主題色是值 Accent (即所謂的強調色)。

另外大伙會看到好N個以 Accent 開頭的值,如 AccentDark1、AccentLight2等。這些值的意思就是,在 Accent 值的基礎上加深或者淺化。比如,Accent 值返回藍色,那么,AccentLight1 表示相對於 Accent 值稍淺一點的藍色;AccentLight2 再淺一點;AccentLight3 再再淺一點。至於說淺多少,深多少,這個你自己研究研究吧。

下面給大伙看看實測效果,為了雅觀,先弄個UI。

        <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <Rectangle Name="rect" Width="300" Height="250" Margin="15" Stroke="Red" StrokeThickness="3"/>
            <TextBlock Margin="12" Grid.Row="1" Text="注意看上面的矩形。" FontSize="16"/>
        </Grid>

這段 XAML 不復雜,要是看不懂的話,可以去咨詢濟公。主要的元素是那個矩形,待會咱們讓它的填充顏色跟隨系統的主題色。

那么,有大伙伴會問了,當系統主題色更改后,我的應用怎么得到通知呢?別緊張,君不見,UISettings 類有個 ColorValuesChanged 事件嗎,這就對了,如果系統主題色改變,就會引發這個事件。所以,聰明的你一定知道后面的思路了,對,就是響應這個事件,給填充矩形的畫刷改變顏色即可。

不過,有一點你得嚴重注意,這個事件是在另一個線程上調用的,所以,你要訪問 UI 元素的話,不要忘了帶上 Dispatcher。

比如這樣。

     uisetting = new UISettings();
     uisetting.ColorValuesChanged += OnColorValuesChanged;

        private async void OnColorValuesChanged(UISettings sender, object args)
        {
            Color bg, fg;
            bg = sender.GetColorValue(UIColorType.Accent);
            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
                () =>
                {
                    SolidColorBrush brush = rect.Fill as SolidColorBrush;
                    if (brush == null)
                    {
                        brush = new SolidColorBrush();
                    }
                    brush.Color = bg;
                });
        }

 

代碼很 Easy,但效果很性感。不信你試試。

 

是不是很性感呢?

 

程序代碼下載地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM