1. 程式人生 > >Expression Blend實例中文教程(12) - 樣式和模板快速入門Style,Template

Expression Blend實例中文教程(12) - 樣式和模板快速入門Style,Template

lap gin ger 快速 style 分享 所有 mar 相同屬性

在上一篇,介紹了Visual State Manager視覺狀態管理器,其中涉及到控件的樣式(Style)和模板(Template),本篇將詳細介紹樣式(Style)和模板(Template)在Silverlight項目中的應用,並介紹如何使用Blend設計樣式(Style)和模板(Template)。

在LOB(Line-of-Business)企業級應用項目開發中,為了使項目的視覺效果多樣化,不僅僅使用動畫效果,而且經常還需要修改部分控件的樣式(Style)和模板(Template)。 在Silverlight的控件包中,微軟已經定義了默認控件樣式和模板,開發人員可以在這些默認的代碼上進行修改和調整,以達到項目需求。但是由於默認的控件樣式和模板代碼過於冗長,手工修改起來相對復雜和繁瑣,對此,微軟封裝了一些新的功能在Blend中,方便開發人員和設計人員對模板和樣式進行控制。 在學習Blend控制樣式(Style)和模板(Template)前,還是先快速了解一下樣式(Style)和模板(Template)。

樣式(Style),有HTML開發基礎的朋友對傳統的CSS樣式表並不陌生,HTML將所有公用的屬性代碼匯集到CSS文件中,使用CSS控制頁面的背景,控制表格的寬度,控制控件距離等。Silverlight中的樣式(Style)和CSS相同,允許設計人員和開發人員將控件的公用屬性定義到資源文件中,允許相同屬性控件自由調用,這樣不僅提高了代碼的復用性,而且保證了控件外觀在項目中的一致性。

模板(Template),模板的概念在傳統的Web頁面開發中已經被引入,早期Dreamweaver因為支持創建Web模板設計,吸引了不少Web開發者。Silverlight中同樣引進了模板的概念。在Silverlight中,凡是繼承自System.Windows.Controls命名控件的控件都有一套默認的模板,設計人員和開發人員可以基於默認模板的基礎上進行修改,創建自定義模板。

樣式(Style)和模板(Template)的定義

在Silverlight中,樣式和模板定義是很簡單的,因為很多屬性已經被封裝好,不需要自行創建,只需要調用就可以了。簡單的演示代碼:

Style:

1 <UserControl.Resources>
2 <Style x:Key="TextBoxStyle" TargetType="TextBox">
3 這裏定義具體樣式屬性
4 </Style>
5 </UserControl.Resources>

Template:

技術分享圖片 1 <UserControl.Resources>

2 <ControlTemplate x:Key="TextBoxTemplate" TargetType="TextBox" >

3 <Border BorderBrush="Orange" BorderThickness="3" CornerRadius="10"

4 Background="Red">

5
這裏定義具體模板
6 </Border>
7 </ControlTemplate>

8 </UserControl.Resources>
技術分享圖片

樣式(Style)和模板(Template)的使用

在Silverlight中樣式(Style)和模板(Template)都屬於控件資源,也就是說,兩者都可以被定義在資源文件中,而在項目頁面中,僅需使用Style和Template屬性調用就可以了。

Style:

1 <TextBox Style={"StaticResource TextBoxStyle"} Text="樣式測試" />

Template:這個方法,也是Blend所支持的方法,下面我們看看實例,進一步理解。

1 <TextBox Template={"StaticResource TextBoxTemplate"} Text="模板測試" />

上面介紹了樣式和模板的最基本的用法。在實際項目中,我們經常把模板(Template)定義在樣式(Style)中,也就是將Template作為一個屬性被賦值在Style中,這樣當樣式(Style)被應用在控件中時,新的模板也會同時加載。例如下面Button樣式代碼,<Setter Property="Template"> Template是作為Style的屬性被設置的:

技術分享圖片代碼

下面我們用一個簡單的實例來理解Style(樣式)和Template(模板)。

首先,我們創建一個新的項目StyleTemplateDemo作為演示。

技術分享圖片

打開MainPage,在主設計窗口中,添加三個按鈕控件到該頁面,

技術分享圖片

對於Button控件的樣式屬性控制,最簡單的方法就是從右邊Properties屬性欄,

技術分享圖片

如果需要創建自定義樣式,則需要按照以下步驟:

首先選中其中一個按鈕控件,在左上角可以看到Button控件下拉菜單,

技術分享圖片

點擊“[Button]”下拉菜單,選擇“Edit Template”,然後選擇“Edit a Copy”,

技術分享圖片

或者,可以在主設計窗口,使用鼠標右鍵選中控件,選擇“Edit Template”,然後選擇“Edit a Copy”,

技術分享圖片

選中“Edit a Copy”,系統會彈出提示窗口,詢問“Create Style Resource”是否創建樣式資源,

其中Name(Key)是樣式名,以後調用該樣式將使用這個Name;

Define in 有三個選擇:

1. Application(應用),該選項是將該樣式代碼添加到App.Xaml文件中;

2. This document(當前文檔),該選項是將該樣式代碼添加到當前編輯文檔中,當前我們編輯MainPage.Xaml,如果選中此項,樣式代碼將被輸出到該文件中;

3. Resource dictionary(資源目錄),該選項是將該樣式代碼添加到自定義資源文件中,如果沒有資源文件,可以點擊“New”創建自定義資源文件;

技術分享圖片

在This document(當前文檔)中,該選項有兩個選擇,

技術分享圖片

“UserControl:<no name>”,選中該選項樣式代碼將在當前文檔創建<UserControl.Resources>,

技術分享圖片

調用是使用前面的基礎調用代碼:

1 <Button Margin="114,197,0,228" Width="139" Content="Button" HorizontalAlignment="Left" d:LayoutOverrides="Width" Style="{StaticResource ButtonStyle1}"/>

“Button:<no name>”,選中該選項樣式代碼將創建在該控件資源下,

技術分享圖片

對比以上三種定義樣式代碼方式,第一種和第三種方法相對來說比較靈活,將樣式代碼放在公共資源文件中,方便其他頁面相同屬性控件調用;而第二種方法,僅供該文件中的相同屬性控件調用。

這裏我們Define in選擇Application,定義樣式代碼到App.xaml中,點擊確定後,系統會打開App.xaml文件,進入控件樣式編輯狀態,這時就可以對控件樣式進行編輯。

技術分享圖片

技術分享圖片

當前主設計窗口打開文件為"App.xaml",因為該文件包含了要編輯的樣式和模板代碼。

在控件處於樣式和模板編輯狀態下,從Objects and Timeline窗口可以查看該控件模板的子部件,通過修改包含的子部件樣式,來改變原按鈕控件樣式。

技術分享圖片

例如我們想改變Button的背景色,可以修改BackgroundGradient屬性,從上圖的Objects and Timeline中選中BackgroundGradient,

技術分享圖片

在右邊Properties屬性欄,修改顏色,即可看到在主設計窗口按鈕的背景色在改變。

技術分享圖片

技術分享圖片

保存以上修改後,回到主設計窗口,能看到兩個Button已經被應用了新的Button樣式,

技術分享圖片

技術分享圖片 1 <Grid x:Name="LayoutRoot" Background="White">
2 <Button x:Name="bt1" Margin="254,151,247,0" Width="139" Content="按鈕樣式" Style="{StaticResource ButtonStyle1}" Height="55" VerticalAlignment="Top"/>
3 <Button Margin="0,151,92,0" Width="139" Content="Button" HorizontalAlignment="Right" d:LayoutOverrides="Width" Height="55" VerticalAlignment="Top"/>
4 <Button Margin="94,151,0,0" Width="139" Content="Button" HorizontalAlignment="Left" d:LayoutOverrides="Width" Style="{StaticResource ButtonStyle1}" Height="55" VerticalAlignment="Top"/>
5 </Grid> 技術分享圖片

從代碼中可以看出,使用 Style="{StaticResource ButtonStyle1}" 的按鈕,已經將默認Button樣式替換為新的Button樣式。如果想修改最後一個Button的樣式,同樣,把Style="{StaticResource ButtonStyle1}" 屬性添加到Button中即可。 在Blend中可以非常簡單的應用新的樣式到控件。

在需要被應用樣式的Button控件上點擊鼠標右鍵,然後選擇“Edit Template”->“Apply Resource” ->選中當前需要被應用的樣式,在主設計窗口即可看到控件樣式的變化。

技術分享圖片

技術分享圖片

現在,我們切換左邊的Objects and Timeline 到 States,當前選中的States是CommonStates組中的Normal, 閱讀過上一篇VSM教程的,相信對這裏並不陌生,Normal表示Button控件的正常視圖狀態。技術分享圖片

這裏我們可以看到,在主設計窗口,Button樣式仍舊是紫色

技術分享圖片

當我們選中MouseOver視圖狀態時,主設計窗口Button樣式,變成默認的樣式。這說明,每個Visual State視覺狀態都有自己獨立樣式,和上一篇講述的控件每個視圖狀態都有獨立性是相符的。

技術分享圖片

所以,要修改完整的一套控件樣式,需要以控件的視圖狀態為基礎,修改每個會引起控件視圖產生變化的狀態。這裏,我們選中MouseOver後,切換Tab到 Objects and Timeline,

選中“BackgroundGradient”,修改Button控件在鼠標覆蓋後的背景,

技術分享圖片

保存後,F5運行該例程,當鼠標放在Button上,自動會切換Button樣式。

Normal狀態:

技術分享圖片

MouseOver狀態:

技術分享圖片

Pressed狀態:

技術分享圖片

上圖可以看出Pressed狀態並沒有改變,仍舊是默認樣式。其樣式修改方法與上面的方法相同,這裏不再重復,大家可以按照以上方法修改。

對於控件樣式的的控制,基本已經講完。在下一篇將介紹Template模板的應用實例。

Expression Blend實例中文教程(12) - 樣式和模板快速入門Style,Template