设备模板支持作为 DeviceSpecific/Choice 构造的一部分提供。编写提供设备模板的 ASP.NET 移动控件非常类似于编写模板化的 ASP.NET 服务器控件。但是,请记住下面这些移动控件独有的特点:
- 每个支持设备模板的移动控件都实现 ITemplateable 接口。这是一个标记接口,没有任何方法。
- 支持设备模板的控件必须具有默认的呈现模式,以便在未定义或指定任何设备模板时控件仍可以呈现在设备上。
- 控件开发人员需要决定在呈现过程中如何对待设备模板。如果定义并选择了任何设备模板,一种行为是切换到独占模板化模式。然后,控件使用所提供的模板执行所有其呈现。List 控件便是这种控件的一个示例。另外,控件可以在纯添加进程中使用模板:如果定义并选择了某个特定的模板,则可将其用于添加或替换部分默认呈现。Form 控件是展示此行为的控件的一个示例。
- 移动控件可以访问已定义模板的集合,而不是公开 ITemplate 属性。MobileControl 基类具有两个成员有助于控件使用设备模板:
- IsTemplated 属性指示控件是否定义并选择了任何模板,如下面的示例所示。
[C#]
if (mobileControl.IsTemplated) { return true; }
- GetTemplate 方法返回给定名称的设备模板,如果未定义模板,则返回 null。下面的示例说明如何检索设备模板以及测试是否是 null 状态。
[C#]
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; } }
- IsTemplated 属性指示控件是否定义并选择了任何模板,如下面的示例所示。
下表说明通过 Form 控件可用的模板。Form 控件支持特定于设备的和与设备无关的模板集。
模板 | 说明 |
---|---|
HeaderTemplate | 页眉模板呈现在窗体的顶部。如果窗体被分页为多个屏幕,则每个屏幕都包含页眉。页眉模板可以是与设备无关的模板集的一部分。如果模板集是与设备无关的,则页眉模板包含移动控件。 |
FooterTemplate | 页脚模板呈现在窗体的底部。如果窗体被分页为多个屏幕,则每个屏幕都包含页脚。页脚模板可以是与设备无关的模板集的一部分。如果模板集是与设备无关的,则页脚模板包含移动控件。 |
ScriptTemplate | 脚本模板呈现在窗体的顶部。如果窗体被分页成多个屏幕,则每个屏幕都包含脚本模板。在 HTML 设备上,脚本模板中的代码直接添加在开始 <head> 标记之后,在 WML 设备上,直接添加在开始 <card> 标记之后。 |
也可以通过编程的方式使用这些模板。请参见 Footer 属性、Header 属性和 Script 属性。
请参见