除此之外,Form控件中还包含了一个使用DeviceSpecific/Choice构造的Label控件,而使用DeviceSpecific/Choice构造的主要目的就是属性重写。Label控件默认状态下的文本值为一段长的字符串"Welcome to our mobile Sports Extra Web site. Check here for up-to-the minute sports news as it happens!"。然而,在一些小屏幕的设备来说,例如支持WML 1.1,CHTML 1.0标记语言的设备(也就是说对isWML11、isCHTML10设备筛选器来说返回true),上述的字符串将缩短为"Welcome to LIVE results!"。而且在i-mode的设备(就是支持CHTML 1.0的设备)上,Text属性和ForeColor属性均被重写。 下面两图分别是上述程序在Pocket Internet Explorer和openwave仿真程序中的实际显示效果。从图可以看出,在Pocket Internet Explorer中,页面的布局是采用表格的形式,而且因为Pocket Internet Explorer支持HTML 3.2标记语言,所以DeviceSpecific/Choice构造的{dy}个<Choice>元素返回true值,为此会使用<HeaderTemplate>和<FooterTemplate>两个模板,并且label控件显示的是长字符串文本。 使用属性重写为自定义特定设备的呈现 属性重写是一种在DeviceSpecific/Choice构造中为不同的客户端设备设置不同的控件属性值的方法,也就是说可以根据不同的设备进行不同的呈现。 每个ASP.NET移动控件都可以包含一个DeviceSpecific/Choice构造。在<DeviceSpecific>元素中的每个<Choice>元素依次进行鉴别,而{dy}个鉴别为true的<Choice>元素将应用到包含该构造的控件上。在上一篇文章《设备筛选器的定义及实现》中,我曾经举了一个使用属性重写的具体的实例,就是使用image控件为特定的移动设备呈现该设备支持格式的图片,代码如下:
当客户端设备请求包含该控件的页面时,ASP.NET会自动使用该设备对应的MobileCapabilities对象来解析<Choice>元素。如果isHTML32返回true的话,那么image控件就将使用Northwindlogo.gif进行呈现。如果isWML11返回true,就使用Northwindlogo.wbmp图片。如果上述的两个设备筛选器均不为true 的话,那么ImageUrl属性就处于未定义状态,也就是说将使用image控件的AlternateText属性值"Northwind Corp."文本进行替代。 提示:在image控件中使用的两个设备筛选器均已经在Web.Config文件中进行了定义,如果你的站点程序还没有Web.Config文件的话,可以在"解决方案资源管理器"中通过右键菜单的"添加新项"-"移动Web配置文件"方式手动进行添加。 在上面的示例中演示了DeviceSpecific/Choice构造的基本用法:如果特定的设备筛选器为true的话,将对包含该构造的控件进行属性重写。属性重写主要可以用来实现: 1. 使用不同的图片文件:当一个客户端设备支持不同的图片格式,你可以采用属性重写实现选择何种图片进行呈现。 2. 因为设备显示屏大小而对字符串进行调整:你可以在一些大屏幕的设备上使用长字符串,而在小屏幕的设备使用缩减的字符串。 3. 支持多语言的程序:你可以根据客户端设备使用的{sx}语言,为控件的Text属性设置以该语言对应的文本。 4. 为特定设备自定义样式属性:当客户端设备在呈现控件时,ASP.NET会根据该设备支持的特性使用不同的字体或颜色。除此之外,你还可以为特定的设备使用不同的样式属性。 在下一篇文章中将会介如何使用DeviceSpecific/Choice构造和模板化控件,为客户端设备使用特定的标记语言。 |