为ASP.NET控件添加设计时支持(8)
发表于:2007-06-30来源:作者:点击数:
标签:
HTML视图支持:自定义架构和 Visual Studio 注释 尽管前文所述的特性帮助我们为 Blog 控件提供了设计时支持,但这里遗漏了一个重要的问题:在 Web 窗体编辑器的 HTML 视图中添加标记和特性的 IntelliSense 支持。对于那些认为在 HTML 环境中工作比在“所见即
HTML视图支持:自定义架构和 Visual Studio 注释
尽管前文所述的特性帮助我们为 Blog 控件提供了设计时支持,但这里遗漏了一个重要的问题:在 Web 窗体编辑器的 HTML 视图中添加标记和特性的 IntelliSense 支持。对于那些认为在 HTML 环境中工作比在“所见即所得”风格的环境中工作更舒适的
开发人员来说,这是一个极大的疏忽。
因为 Web 窗体编辑器的 HTML 视图使用 XSD 架构决定在 Web 窗体页上提供哪些元素和特性,所以为了纠正这一问题,我们需要提供一个描述 Blog 控件及其所支持的特性的 XSD 架构。也可以在该架构中添加注释,告诉 Visual Studio .net 各种元素的有关信息以及我们所希望的元素行为。
列表 5 包含 Blog 控件特定的 XSD 架构的部分内容。实际的架构文件(可从本文的示例代码中获得)还包含面板控件(Blog_DT 控件就是由它派生的)的类型定义以及其他必需的特性和类型定义。这些定义是从为内置 ASP.NET
服务器控件创建的 asp.xsd 架构文件中复制的。
请注意,任何时候都不应直接修改 asp.xsd 架构文件,而只应将必需的类型和特性定义复制到您的自定义架构文件中。尽管这看起来是多余的,但如果直接编辑 asp.xsd,以后安装 .NET Framework 或服务包时该文件将被覆盖,您的自定义输入项将因此而丢失。
在列表 5 中,请注意根架构元素上的 targetNamespace 和 XMLns 特性,这两个特性用于为控件的架构定义 XML 命名空间。targetNamespace 和 xmlns 特性的值还将用于 Web 窗体页中的特性,以“绑定”该架构。<xsd:element> 标记定义根 Blog_DT 元素。<xsd:complexType> 标记定义 Blog_DT 元素的特性,包括 <xsd:attributeGroup> 标记引用的 Web 控件特性。最后,<xsd:simpleType> 标记定义 BlogMode 类型的枚举,该类型被用作 Blog_DT 元素的一个特性。
请注意,列表 5 使用 vs:builder 注释来告诉 Visual Studio .NET 对 AddRedirect 特性使用 URL 生成器,而对 SeparatorColor 特性使用颜色生成器。vs:builder 注释是可用于修改架构的注释之一。表 1 列出了最常用的注释。
表 1:常用的 Visual Studio .NET 注释
注释 用途 有效值
vs:absolutepositioning 在根 <schema> 元素上使用,用于确定 Visual Studio 是否可以插入用于定位的样式特性。 true 或 false
vs:blockformatted 表明是否可以在自动格式化期间为元素添加前导空格。 true 或 false
vs:builder 指定用于编辑相关属性值的生成器。 颜色、样式或 URL
vs:deprecated 允许将某个相关属性标记为“已否决”,以防止其在属性浏览器和语句完成中出现。 true 或 false
vs:empty 在元素级别使用,用于指示 Visual Studio .NET 应对相关标记(无结束标记)使用一个标记语法。 true 或 false
vs:friendlyname 在根级别使用,用于为架构提供显示名。
vs:iscasesensitive 在根级别使用,说明 Visual Studio .NET 是否以区分大小写的方式处理相关标记。 true 或 false
vs:ishtmlschema 在根级别使用,说明架构是否是一个 HTML 文档架构。 true 或 false
vs:nonbrowseable 在特性级别使用,说明该特性不应出现在语句完成中。 true 或 false
vs:readonly 在特性级别使用,说明不能在属性窗口中修改该特性。 true 或 false
vs:requireattributequotes 在根级别使用,说明特性值必须用引号括起。 true 或 false
创建自己的 XSD 架构后,可以将其与 asp.xsd 文件保存到同一位置(在 Visual Studio .NET 2003 中,默认为 C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Packages\schemas\xml\)。
要允许 Visual Studio .NET 读取您的自定义架构,需要将一个 xmlns 特性添加到要使用该架构的页面的 <body> 标记中,如以下代码片段所示:
<body xmlns:BlogControl="urn:http://www.aspnetian.com/schemas">
请注意,此段代码使用具有 xmlns 特性的 BlogControl 前缀来说明该架构适用于带有 BlogControl 标记前缀的控件,这个可以再次调用的前缀是使用 TagPrefix 特性进行设置的(有关该特性的说明,请参见上文中的“元数据特性”一节)。xmlns 特性的值应与架构根元素中定义的 targetNamespace 特性的值相同。
通过 xmlns 特性绑定架构之后,即可键入一个开放的“<”字符,并使 Blog 控件显示为语句完成的一个选项,如图 8 所示。此时,还应获取已定义属性的语句完成,包括 Mode 属性的有效值,以及由 XSD 文件中的注释指定的生成器。
图 8:HTML 视图中的语句完成
原文转自:http://www.ltesting.net