樣式
更新:2007 年 11 月
每個 ASP.NET Mobile 控制項都提供可讓您用來自訂控制項呈現方式的樣式屬性。為了使用方便,樣式可以被組成群組,如此您就能在頁面上跨多個項目套用一致的樣式。請使用 StyleSheet 控制項或 Style 項目,存取該控制項和裝置能力的特定屬性。
注意事項: |
---|
樣式屬性設定並不一定適用於所有情形。如果目標裝置不支援特定的樣式,ASP.NET 便會忽略該樣式或是以不同樣式加以取代。 |
樣式繼承
除非您在控制項中明確指定樣式屬性 (無論是直接指定或是使用樣式參考間接指定),否則控制項會繼承其容器 (Container) 的樣式屬性。多數樣式屬性的預設值都會是 null 或是 NotSet 的列舉值。這使得區分已明確設定的樣式屬性和未設定的樣式屬性更為容易。
明確宣告樣式
明確宣告控制項之樣式的方法有兩種。其中一種是設定樣式屬性。例如,假設您建立表單,並將 Label 控制項加入至該表單(此標籤接著會成為表單的子控制項)。然後,當您將該標籤 (Label) 的 Font-Name 屬性設定為 "Arial" 時,其將會使用 Arial 字型。
另一種為子控制項明確設定樣式的方式,則是設定控制項的 StyleReference 屬性。
使用 DeviceSpecific 控制項設定樣式
您也可以透過 DeviceSpecific 控制項來設定樣式屬性。下列範例示範某個標籤會在大部分裝置中以斜體顯示,但是在桌上型裝置則以粗體顯示。
<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage" %>
<script language="C#" >
// A custom method to determine if the page
// is displayed on a mobile device
public bool IsDesktop(System.Web.Mobile.MobileCapabilities
capabilities, String argument)
{
return !capabilities.IsMobileDevice;
}
</script>
<Mobile:StyleSheet >
<Style Name="ListStyle" Font-Italic="true">
<DeviceSpecific>
<Choice Filter="IsDesktop" Font-Italic="false"
Font-Bold="true" />
</DeviceSpecific>
</Style>
</Mobile:StyleSheet>
<Mobile:Form runat=server>
<Mobile:Label id="list1" runat=server StyleReference="ListStyle">
Here is some text
</Mobile:Label>
</Mobile:Form>
參考樣式的查詢演算法
當透過 StyleReference 屬性參考樣式時,ASP.NET 會按照特定的檢查順序來決定要套用何種樣式。下列清單使用 Font-Size 做為範例,說明針對子控制項 (即父容器控制項內的控制項) 決定子系特性的規則:
如果已針對子控制項明確設定 Font-Size 屬性 (Attribute),該控制項便會使用該設定。
否則,如果子控制項的 StyleReference 屬性已完成設定 (例如,myChild.StyleReference = someStyle),此控制項便會使用所參考之 Style 項目 (例如,someStyle) 中 Font-Size 屬性的值。子控制項會進行下列動作以存取其值:
子系會先查詢目前 MobilePage 執行個體 (Instance) 之樣式表中的參考樣式。
如果子系並未在頁面的樣式表上找到它,則會參考系統預設的樣式表。
如果子系在兩個樣式表上都沒有找到它,則會產生執行階段錯誤。
如果無法直接或間接使用樣式,表示 StyleReference 屬性尚未設定,而且子控制項會將此程序遞迴套用到父控制項,以便取得其 Font-Size 屬性的值。
如果這項遞迴作業達到控制項階層架構的最上層,卻仍然沒有找到 Font-Size 屬性的明確值,該控制項便會使用預設的字型大小。
這個演算法允許您使用從多控制項中參考的不同樣式。它支援自包含控制項繼承,並且遵循標準程式碼和邏輯例外狀況。
查詢演算法的例外狀況
查詢演算法有出現兩種例外狀況:
背景色彩不會從父物件接收其值(這個行為與階層式樣式表相同)。
DeviceSpecific 控制項不會繼承父控制項的值。DeviceSpecific 控制項通常都會針對特定控制項或控制項型別明確撰寫。
樣式表
ASP.NET Mobile 控制項提供您設定一定數目之樣式的預設樣式表。如需詳細資訊,請參閱 StyleSheet。您可以輕易地覆寫這些預設樣式中的值來套用您自己的值。單一樣式表中可以存在任何數目的 <Style> 項目宣告。每個 <Style> 項目都會以唯一的 Name 屬性加以識別。您可以將其他控制項的 StyleReference 屬性設定為 Name 屬性,如此便可參考其樣式。您也可以使用這個技術自另一個樣式中參考樣式。
外部樣式表
您可以定義要用於多個控制項的外部樣式表。如果您想要跨多頁面使用相同的樣式,這會很有用處。若要建立外部樣式表,請在 .ascx 檔中建立使用者控制項 (User Control),並於其中放置包含樣式集的單一 StyleSheet 控制項。接著,若要參考此檔案,請在行動網頁上放置 StyleSheet 控制項,並將其 ReferencePath 屬性設定為該使用者控制項的相對 URL。
外部樣式表實作
實作外部樣式表時必須執行三個步驟:
在 .ascx 檔中撰寫 Microsoft ASP.NET Mobile 使用者控制項。
在 .ascx 檔中放置單一樣式表,加入您所需要的 <Style> 項目。
宣告樣式表,並將其 ReferencePath 屬性設定為每一個您要在其中使用該外部樣式表的行動網頁之使用者控制項 .ascx 檔案名稱。
在 Run Time 時,所有您在外部樣式表中宣告的樣式,都成為可用於 ASP.NET 網頁架構之行動網頁上的樣式表。如需使用者控制項的詳細資訊,請參閱使用者控制項。
樣式物件的特性和樣式類別
Style 物件並非真的控制項,而且不是繼承自基底 MobileControl 類別。在頁面中,它只能透過使用 <Style> 項目宣告於 StyleSheet 控制項中。
基底 Style 類別包含所有行動控制項的通用樣式特性。繼承自 Style 類別的類別,包含其關聯控制項專屬的其他樣式特性。
每個 MobileControl 都會內部包含一個 Style 物件。然而,該 Style 物件並未透過 Public 成員公開 (Expose)。對於每一個樣式屬性而言,MobileControl 都有可內部參考私用包含樣式的公用可存取屬性。因此,MobileControl 會直接公開例如 Font、ForeColor 和 Wrapping 等樣式屬性。
組織樣式
您可以將樣式組織到 StyleSheet 控制項中。在樣式表中,您可以宣告任何數量的樣式物件。宣告樣式的方式與任何控制項都相同,唯一差異是前者不需要用到 runat=server 屬性。如需詳細資訊,請參閱 <Style> 項目。
樣式可以從樣式表中的另一個樣式繼承其屬性,方法是將其 StyleReference 屬性設定為父樣式的名稱。此功能的範圍為行動網頁。也就是說,只有相同行動網頁之樣式表上的樣式才可以被參考。若要讓控制項從樣式表中的樣式物件取得其樣式,請將其樣式物件的 StyleReference 屬性設定為該樣式的名稱,方法是在 ASP.NET Mobile Web 網頁中宣告 StyleReference 屬性,或是以程式設計方式設定 StyleReference 屬性。