探讨ASP.NET 2.0中的Web控件改进技术
所使用的构建设计器的方式是,把模板分类到模板组中;这种情况下,在 你的控件中将会存在许多模板。模板本身是在一个称为TemplateDefinition的对 象中定义的;而TemplateGroup对象包含一个或多个这些定义对象。 TemplateGroup对象包含在一个TemplateGroupCollection类型的对象中;因此, 正是在这里(TemplateGroupCollection类型的对象中),设计器类将在类级上声 明一个这种类型的变量。就象在灵敏标签情况下一样,基础结构负责缓存这个对 象—这正是我在一个类级范围上声明它的原因。
这个集合取得一个称为TemplateGroups的内置属性—我现在必须重载之。正 是这个属性的内容将被暴露给页面开发者以实现相应的模板编辑功能。
在这个属性重载中,我将构建Visual Studio使用的 TemplateGroupCollection。属性中的“Is Nothing”检查有助于阻止对这个对 象不必要的重新构建。 首先我将实例化o_TemplateGroups对象。 o_TemplateGroups = New TemplateGroupCollection() 现在,我需要使用我在“灵敏标签”一节中所讨论的组件变量来取得我设计 的控件。 Dim ctl As EmailContact = CType(Component, EmailContact) 稍后,我将使用这个变量。但是首先,我必须建立我要使用的相应于 TemplateGroup和TemplateDefinition对象的两个对象变量。
现在我可以开始定义组和模板了。
让我来详细分析一下该TemplateDefinition构造器中的参数。第一个参数是 一个添加了模板编辑功能的设计器的实例—通常是Me;第二个参数是模板名—它 将显示于一个快捷方式菜单或灵敏标签中。第三个参数是正在设计的控件—通过 转换Component对象来得到它。第四个参数是控件中模板属性的名字。参数列表 最后的Boolean参数被设置为False以便指定这个模板既接收服务器控件也接收 HTML控件。如果把它设置为True则仅允许把服务器控件(常规Web控件)添加到模 板上。 你可能已经猜出,对于你想定义的每个模板和每个模板组,都要重复这一操 作。最终结果是,我的o_TemplateGroups对象中填充了我的模板中定义的所有信 息—而这正是我在这个属性中所返回的内容。 图3:在模板编辑方式的EmailContact 控件 现在,我重新编译并转到我的测试页面。当我右击 EmailContact控件时,我将看到“EditTemplates”被添加到快捷方 式菜单中。子菜单下的列表将显示我在设计器类中所定义的模板组,而当我选择 “Surrounding Templates”组时,我会看到类似图3所示的内容。现 在,你可以看到我手工地添加到这两个模板中的控件;而事实上,我现在就可以 把其它控件从工具箱直接拖动到其上。再次右击鼠标并选择“Edit Templates”将返回到标准控件视图并且在控件中显示该模板内容。 另外还注意,一个“Edit Templates”链接也被自动地 添加到该控件的灵敏标签上。如果以前不存 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |