在前面的文章中我曾经介绍过DeviceSpecific/Choice构造和设备筛选器,那时我们还是在ASP.NET 移动页面的HTML视图下或站点程序的Web.Config文件中通过手动编码来定义设备筛选器和DeviceSpecific/Choice构造。但是,如果你使用的是Visual Studio 2005的话,我们可以直接采用一种便捷的、可视化的方式去定义DeviceSpecific/Choice构造和设备筛选器,避免了在程序中采用手动编码这样繁杂的实现过程,而且因为开发人员没有直接的键入代码,也就不容易出现代码的拼写和语法错误。
提示:在Visual Studio 2005工具箱的"移动Web窗体"选项卡中包含一个名为DeviceSpecific的控件,你可以拖拽此控件到一个Form控件或Panel控件中。而后你将这个页面切换到HTML视图时,你会发现对应的Form控件或Panel控件中将包含DeviceSpecific/Choice的构造语法。有一点需要注意的是,你不能想当然地认为拖拽一个DeviceSpecific控件到其他的ASP.NET移动控件中也会实现上述的DeviceSpecific/Choice构造。只有当你定义一个属性重写或为列表控件定义一个模板化选项时,才会自动地在这些控件里添加一个DeviceSpecific/Choice构造。DeviceSpecific控件仅适用于在Form控件和Panel控件中以一种可视化的方式定义模板化选项。
创建和应用设备筛选器
在ASP.NET移动页面上选中一个控件后,在属性窗口的"设备特定"栏中可以看到(AppliedDeviceFilters)项,我们可以点击其右侧空白处的省略号按钮,这时会弹出"已应用的设备筛选器"对话框。原本该对话框的首要目的是编辑完控件的属性后,为这种状态下的控件应用设备筛选器,但是它也可以让你定义新的设备筛选器。并且这些定义好的设备筛选器可以应用于整个站点程序和所有的控件中,ASP.NET会自动将这些新定义的设备筛选器存储在站点程序的Web.Config文件中。
在上图"可用的设备筛选器"下拉列表中,列举出了当前正在编辑属性的控件所有可用的设备筛选器。该对话框的下方列表中,显示了当前正在编辑属性的控件已应用的设备筛选器。 如果你要新建一个设备筛选器的话,可以点击对话框上的"编辑"按钮。这时会弹出"设备筛选器编辑器",如图所示:
在该对话框中,你将可以在右侧的"设备筛选器"列表中看到当前站点程序中已存在的设备筛选器。当你在上述的"设备筛选器"列表中任选一个类型为"相等比较"的设备筛选器,该设备筛选器对应的属性就会在"比较"下拉列表框和"参数"文本框中显现出来。
所有添加一个"相等比较"的设备筛选器,你按照如下的步骤即可实现:
1. 点击"设备筛选器编辑器"对话框上的"新建设备筛选器"按钮。
2. 为这个新建的设备筛选器键入一个合适的名称。
3. 该设备筛选器的"类型"选择"相等比较"。
4. 在"比较"下拉列表框中,键入或选择要与对话框中"参数"文本框中的值进行比较的MobileCapabilities类中的某个属性。
5. 在"参数"文本框中输入参数值,当一个MobileCapabilities对象对应的属性值和该参数相等时就将返回"true"值。
提示:就拿上图来说是一个名为isWML11的设备筛选器,在这里我们选择要比较的属性是PreferredRenderingType,也就是说如果该设备筛选器的PreferredRenderingType属性对应的值等于下面"参数"文本框的值"wml11",那么该设备筛选器就返回一个true值。
创建一个类型为"鉴别委托"的设备筛选器的过程和上面相等比较设备筛选器的创建过程是类似的,惟一的不同就是鉴别委托的设备筛选器不是在"比较"下拉列表框和"参数"文本框键入或选择相应的内容,取而代之的是你需要在"类型"文本框输入包含自定义委托的类名和.DLL程序集名,而在"方法"文本框输入的是实际的委托方法名。
在上一篇文章《设备筛选器的定义及实现》描述了一个名为UseLargeGIF委托方法,如果你需要使用该方法来鉴别一幅图片是不是大型GIF图片的话,你需要在类型文本框中输入"MyEvaluators.CustomEvals,MyEvaluators",而在"方法"处输入"UseLargeGif"。当你为站点程序定义好了所有的设备筛选器后,你可以将它们应用到任何一个希望实现属性重写的控件中。所有你新定义的设备筛选器都会在"设备筛选器编辑器"下拉列表中显现出来。