裝置樣板支援
更新:2007 年 11 月
裝置樣板支援是提供做為 DeviceSpecific/Choice 建構的一部分。撰寫提供裝置樣板的 ASP.NET Mobile 控制項和撰寫樣板化 ASP.NET 伺服器控制項非常類似。然而,請務必牢記下列屬於行動控制項特有的差異性:
每個支援裝置樣板的行動控制項都會實作 ITemplateable 介面。這是沒有方法的標記介面。
支援裝置樣板的控制項必須具有預設的呈現模式,這樣一來,當沒有定義或指定裝置樣板時,控制項仍然可以在裝置上呈現。
控制項開發人員必須決定在呈現時如何處理裝置樣板。當定義和選擇任何裝置樣板時,其中一個行為是切換成以獨佔方式樣板化的模式。接著,控制項會使用所提供之樣板執行其所有的呈現。List 控制項就是這類控制項的範例。或者,控制項可以在完全加法類處理中使用樣板;如果定義並選擇了某個樣板,它可用來加入或取代預設呈現的某個部分。Form 控制項就是表現此行為之控制項的範例。
行動控制項不會公開 (Expose) ITemplate 屬性,其可以存取已定義樣板的集合。MobileControl 基底類別 (Base Class) 有兩個可以協助控制項使用裝置樣板的成員:
IsTemplated 屬性表示控制項是否已定義和選擇任何樣板,如下列程式碼範例所示。
if (mobileControl.IsTemplated) { return true; }
GetTemplate 方法會傳回指定名稱的裝置樣板,或是在沒有定義時傳回 null。下列範例示範如何在 null 狀態下擷取和測試裝置樣板。
public override void CreateDefaultTemplatedUI(bool doDataBind) { ITemplate headerTemplate = GetTemplate(Constants.HeaderTemplateTag); ITemplate footerTemplate = GetTemplate(Constants.FooterTemplateTag); ITemplate scriptTemplate = GetTemplate(Constants.ScriptTemplateTag); if (headerTemplate != null) { _headerContainer = new TemplateContainer(); headerTemplate.InstantiateIn(_headerContainer); _headerContainer.EnablePagination = false; Controls.AddAt(0, _headerContainer); } if (footerTemplate != null) { _footerContainer = new TemplateContainer(); footerTemplate.InstantiateIn(_footerContainer); _footerContainer.EnablePagination = false; Controls.Add(_footerContainer); } if (scriptTemplate != null) { _scriptContainer = new TemplateContainer(); scriptTemplate.InstantiateIn(_scriptContainer); _scriptContainer.EnablePagination = false; } }
下表會說明可透過 Form 控制項使用的樣板。Form 控制項同時支援裝置特定和與裝置無關 (Device-Independent) 的樣板集合。
樣板 |
說明 |
---|---|
頁首樣板 |
頁首樣板呈現在表單的上方。如果表單是重新編頁成數個螢幕時,每個螢幕都含有這個頁首。頁首樣板可以是與裝置無關的樣板集合的一部分。如果該樣板集合是與裝置無關,頁首樣板會包含行動控制項。 |
頁尾樣板 |
頁尾樣板呈現在表單的下方。如果表單是重新編頁成數個螢幕時,每個螢幕都含有這個頁尾。頁尾樣板可以是與裝置無關的樣板集合的一部分。如果該樣板集合是與裝置無關,頁尾樣板會包含行動控制項。 |
指令碼樣板 |
指令碼樣板呈現在表單的上方。如果表單是重新編頁成數個螢幕時,每個螢幕都含有這個指令碼樣板。對於在指令碼樣板內的程式碼,在 HTML 裝置上是直接加到 <head> 開頭標記 (Tag) 後面,在 WML 裝置上則是直接加到 <card> 開頭標記後面。 |
也可以利用程式設計方式使用這些樣板。如需詳細資訊,請參閱 Footer 屬性、Header 屬性和 Script 屬性。