本文將重點講解如何為特定的硬件設備自定義ASP.net Web移動程序,以及使用模板自定義Form和Panel等控件。通過屬性重寫這個特性,使ASP.NET Web移動程序可以根據移動設備的硬件功能,為特定的硬件指定其控件的屬性值。例如,應用程序可能需要一個Label控件在一些設備上顯示較長的文本,而在另一些設備上顯示較簡短的文本。這就需要我們為每個控件都提供一組屬性,應用程序可以針對各個設備重寫這些屬性。所有的ASP.NET移動控件都具有默認的外觀和布局。對於ASP.NET移動控件,你可通過設置屬性或使用樣式來改變移動控件的默認外觀。你還可以使用模板自定義某些移動控件的外觀。本章還將重點介紹模板和模板集,以及它們的使用方法。
自定義的方式
在前面的幾個專題中,我們提過如何使用設備篩選器為特定設備進行自定義。除此之外,我們還可以使用模板化技術和屬性重寫功能使你可以自定義你的應用程序,以便對特定的設備類型以不同的方式呈現控件。如果你在.aspx頁面中為一個控件使用上述的任何一種自定義方法,都可以使用一個名為DeviceSpecific/Choice構造的移動控件語法。DeviceSpecific/Choice構造通常是為特定於設備的選項模板集以及控件內在多個備選內容之間指定一個選項。例如,下面的代碼是一個Label控件的聲明語法,在這個聲明中包含了一個用來鑒別當前浏覽器是否支持HTML的DeviceSpecific/Choice構造。
<mobile:Label id="Label1" runat="server" Text="Default text">
<DeviceSpecific>
<Choice Filter="isHTML32" Text="Text for selected devices" ></Choice>
</DeviceSpecific>
</mobile:Label>
其中Filter屬性指定了一個設備篩選器,該設備篩選器其名稱為isHTML32,它用來鑒別一個移動設備是否內置了HTML浏覽器。如果內置了HTML浏覽器的話,將會在Label控件上應用“Text for selected device”這段文本。相反的,就不作任何的顯示。正如上述的代碼所示,在<DeviceSpecific></DeviceSpecific>內通常包含一個或多個<Choice>元素,每個元素都包含指定如何根據目標設備功能計算選項的屬性。運行時依次計算每個選項,並使用成功計算出的第一個選項(這和C#裡的switch case語句非常相似)。
在開始學習如何定義一個設備篩選器前,先讓我們先了解一些基本的概念,例如屬性重寫和模板化的具體含義。
屬性重寫
一般情況下,我們開發的ASP.NET Web移動程序並不是針對某個具體的設備,而是可以根據移動設備硬件特性的不同,通過適應性的調整從而可以在幾乎所有的硬件設備上進行良好的呈現。
但是因為品牌和型號的不同,這些移動設備間就不可避免地存在一些差異。例如支持的顏色、屏幕大小、輸入功能以及浏覽器使用的標記語言等。前面提到過,ASP.NET控件是可以被幾乎所有的硬件設備支持的,因為它們本身就具有適應性調整的功能,而且控件設置的屬性值也會伴隨ASP.NET控件應用到具體的應用程序中,並不會因為硬件設備的不同使屬性值不同。但是,在某些情況下你可能捨棄默認的呈現,采用自定義的呈現方式。一個典型的例子就是字符的顯示,例如我們使用Label控件進行字符串的顯示,在一些屏幕較小的設備上,每一行顯示的字符數也是較少的,因此我們可以為該控件的Text屬性設置為“我們使用ASP.NET”,而針對一些大屏幕的設備,我們可以將Label控件的Text屬性設置為“我們使用ASP.NET構建一個功能完善的移動應用程序”,正是因為屬性重寫功能,我們才可以使用上述的方法來構建一個針對不同移動設備的硬件特性做出最好呈現的ASP.NET Web移動應用程序。
模板
Form、Panel、List和ObjectList等移動控件都是模板化的控件。開發人員通常使用模板來改變或豐富應用程序的外觀或內容。例如,如果為Form控件指定並選擇了頁眉或頁腳模板,則該模板中包含的標記將被添加到窗體內容中,分別作為頁眉或頁腳進行呈現。請注意模板不同於樣式,模板定義要顯示的內容和控件。當應用程序呈現模板附加到的控件時,即會呈現模板。而樣式指定內容和控件的外觀,您的應用程序可在不使用模板的情況下使用樣式,它也可在模板內將樣式應用於您定義的移動控件。 除了模板外,ASP.NET移動控件在此基礎上還擴展了一個新的模型,並引入了模板集的概念。模板集是由模板組成的集合。但是,單個模板化控件可能引用多個模板集,而每個模板集都具有不同的特定於設備的條件。模板集的具體實現將在後續章節具體介紹。