天天看點

UWP入門(四)--設定控件樣式

可分享至不同elements的資源中 建立可重用的style,并且這一資源可以分享至整單頁面、多頁面、整個 app,甚至不同的app?

how to keep up with style in different app (pre-build theme) 預建主題

這裡将 Foreground 設定了 Binding 語句,可以看到<code>{StaticResource MyBrush}</code>,并且命名為MyBrush

當我們需要綁定一個 Resouce 的時候,需要做的表達式就是

<code>&lt;Page.Resources&gt;</code>中可以綁定多個資源,eg:

不僅是簡單的 resource,我們可以通過style來重複利用一個或多個特定設定,不管是單個頁面還是整個App

當重複利用這個 style 時,你可以設定一個特定的 control style 特性,然後将它與已知的 style 相連接配接

注意名稱,不要太在意細節,我講重點:

在 Style 定義中,你需要一個 TargetType 屬性和由一個或多個 Setter 元素組成的集合。 TargetType 屬性是一個指定要應用樣式的 FrameworkElement 類型的字元串(系統已經有的style)。 TargetType 值必須指定由 Windows 運作時定義的派生的 FrameworkElement 類型或引用的程式集中提供的自定義類型。 如果你試圖将某個樣式應用到某控件,而此控件的類型與你試圖應用的樣式的 TargetType 屬性不比對,則會發生異常。自定義名字的在後面

每個 Setter 元素都需要一個 Property 和一個 Value。 這些屬性設定用于訓示該設定将應用于哪個控件屬性,以及為該屬性設定的值。 你可以使用特性或屬性元素文法設定 Setter.Value。 下面的 XAML 顯示了應用于前面顯示的按鈕的樣式。 在此 XAML 中,前兩個 Setter 元素使用特性文法,但是最後一個 Setter(用于設定 BorderBrush 屬性)使用屬性元素文法。 該示例不使用 x:Key 特性這一特性,是以該樣式已隐式應用到按鈕。 隐式或顯式應用樣式之後講

自定義名稱隻需要加一句:

如果你将樣式定義為資源,有兩種方法可将其應用到控件:

隐式方法,通過僅指定 Style 的 TargetType。

顯式方法,通過指定 <code>Style</code> 的 <code>TargetType</code> 和 <code>x:Key</code> 特性這一特性,然後通過使用顯式鍵的 <code>{StaticResource}</code> 标記擴充引用設定目标控件的 <code>Style</code> 屬性

如果樣式包含 <code>x:Key</code> 特性,則隻能通過将控件的 <code>Style</code> 屬性設定為鍵控樣式,進而将其應用到控件。 相反,沒有 x:Key 特性的樣式會自動應用到其目标類型的每個控件,這些控件沒有顯示樣式設定。

下面兩個按鈕示範了隐式和顯示樣式

下面兩個按鈕示範了隐式和顯示樣式,在本示例中,第一個樣式具有 x:Key 特性,其目标類型為 Button。 第一個按鈕的 Style 屬性設定為此關鍵字,是以顯示應用該樣式。 第二個樣式會隐式應用到第二個按鈕,因為該按鈕的目标類型為 Button,并且該樣式沒有 x:Key 特性

上面寫的都是專屬于 MainPage 的,如果想在 app 的所有頁面中用呢?

将 PageResouce 這一部分删掉,然後将它們建立App.XML 中的 Applcation.Resource 元素上

不光是在 page 和 application 中設定簡單的 resource.dictory,我們還可以建立名為 merg resource dictory ,能讓你在多個文檔中找到 resource dictory ,然後将他們結合在一起,可以通過這個保持程式的複雜性,并且可以在不同的項目中重用這些 dictionary 文檔

步驟:

右上角 Project 右鍵 –&gt; Add new Item –&gt; Resource Dictory

Dictionary1.xaml

Dictionary2.xaml

MainPage.xaml

為了使樣式便于維護以及優化樣式的重複使用,你可以建立從其他樣式繼承的樣式。 使用 <code>BasedOn</code> 屬性可建立繼承的樣式。

從其他樣式繼承的樣式必須應用到同一類型的控件,或者從基本樣式的目标類型派生出來的控件。 例如,如果基本樣式的目标類型為 ContentControl,則基于此樣式的樣式可應用到 ContentControl 或從 ContentControl 派生的類型(如 Button 和 ScrollViewer)。 如果基于樣式(子類)的值沒有設定,則從基本樣式繼承(父類)。 要從基本樣式更改值,基于樣式會覆寫該值。 下一個示例示範了具有從同一基本樣式繼承的樣式的 Button 和 CheckBox

基本樣式應用到 ContentControl,并設定 Height 和 Width 屬性。 基于此樣式的樣式應用到 CheckBox 和 Button,這些類型從 ContentControl 派生而來。 基于樣式為 BorderBrush 和 Foreground 屬性設定不同的顔色。 (通常不在 CheckBox 的周圍加邊框。 我們在此處執行此操作,來顯示樣式的效果。)

UWP入門(四)--設定控件樣式

繼續閱讀