1. 程式人生 > >【Windows 10 應用開發】跟隨系統主題顏色

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

tex 線程 align tro 都是 顏色 stroke object 截圖

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

實現過程並不復雜,主要用到 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,但效果很性感。不信你試試。

技術分享

是不是很性感呢?

程序代碼下載地址

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