• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Stand By .NET

.NET & SQL Server
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

第十五章 设计期功能

    可设计的组件是一个实现了 IComponent 接口的类,或者是从实现了该接口的 System.ComponentModel.Component 类直接或间接派生的类。 
    基类 Control 实现了 IComponent,因此所有的服务器控件都是可设计的组件,并且都自动地加入到 .NET 框架的设计期架构中。
    .NET 设计期架构的一个重要方面就是不用在控件中实现设计期能力,而是在控件以外的类中实现这些能力。通过元数据 attribute 把这些类和控件关联起来。

    提供高级设计期功能的四个主要类:
    ·类型转换器:它是与类型或属性相关的类,实现了字符串到值以及与其相关的类型和其他类型之间的转换。属性浏览器用类型转换器以文本字符串显示属性的值,并把用户输入的文本字符串转换成表示属性值的对象。设计器也使用类型转换器来完成其他的任务;
    ·设计器:它是与控件相关的类,用来管理在设计界面中控件的外观和行为。使用设计器,控件可以在设计期而不是运行期提供不同的可视化表示;
    ·UI类型编辑器:它是与类型或属性相关的类,提供了一个编辑属性的特殊的用户界面。UI类型编辑器是在属性浏览器中运行的,当属性浏览器提供的简单文本输入界面对编辑属性不够用时,就可以用它;
    ·组件编辑器:它是与控件相关的类,为控件属性的总体编辑提供了一个UI。组件编辑器提供了与 Microsoft ActiveX 控件中属性页面类似的功能。它并不是属性浏览器的代替,而是提供了一个更方便的UI,来编辑控件通常被访问的属性。

    ·类型转换器
        类型转换器是一个派生自 System.ComponentModel.TypeConvert 的类,实现给定类型与其他类型之间的互相转换。设计期和运行期都要用到类型转换器。
        在设计期,属性浏览器使用类型转换器的目的如下:
        ·把不是 String 类型的属性值转换成字符串表示,显示在属性浏览器中。反之,属性浏览器也用类型转换器来把用户输入的文本字符串转换成表示相应属性类型的对象;
        ·为子属性提供一个展开/折叠的 UI 。System.ComponentModel.ExpandableObjectConverter 提供了该功能的实现。也可以扩展 ExpandableObjectConverter 类;
        ·为数据绑定控件中的设计期属性提供一个值的下拉列表(第16章)。

    ·设计器
        设计器是用来管理设计界面中组件行为的类。在 .NET 框架中,System.ComponentModel.Design.IDesigner 接口指定了核心的设计器功能。System.ComponentModel.Design.ComponentDesigner 类实现了该接口,对所有(可设计的)的组件提供了基本的设计器功能。
        Web Forms 和 Windows Forms 的核心设计器架构相同。但是,Web Forms 和 Web Forms 使用了不同的显示引擎。Web Forms 设计器使用的显示引擎是 Microsoft Internet Explorer,Web Forms 设计器使用的显示引擎是 GDI+。Web Forms 和 Web Forms 从 ComponentDesigner 派生,定义了自己的基本设计器类,来提供与相应引擎相关的设计期的基本显示逻辑。
        为了设计一个自定义的控件设计器,必须实现一个直接或间接派生自 ControlDesigner 的类,重载下面列出的方法:
        ·GetDesignTimeHtml:返回包含设计期生成的 HTML 的字符串。ControlDesigner 实现了该方法,通过调用控件的 RenderControl 方法,返回在设计期由控件产生的 HTML;
        ·GetErrorDesignTimeHtml:如果在产生设计期 HTML 时遇到错误,该方法返回在设计期生成的 HTML。ControlDesigner 在该方法中返回一个空字符串。也可以重载该方法,通过调用帮助器方法 CreatePlaceHolderDesignTimeHtml 在设计期的 HTML 中产生有用的错误消息;
        ·GetEmptyDesignTimeHtml:当由调用 RenderControl 产生的 HTML 返回的是空字符串时,该方法返回设计期生成的 HTML。如果页面开发者没有设置显示控件所需要的属性集,这种情况就会发生。ControlDesigner 中该方法的实现返回一个字符串,它表示了控件的类型和 ID,因此可以用来作为设计界面中控件的标识,也可以重载该方法,通过调用帮助器方法 CreatePlaceHolderDesignTimeHtml ,为页面开发者产生占位符设计期 HTML 和指令消息;
        ·Initialize:当设计器被初始化并与组件相关联时,调用该方法。该方法的基类实现检查组件关联的是派生自 Control 的哪一种设计器。应该重载该方法,检查设计器是否与想使用的控件类型相关联。

        读写控件设计器不能做什么:
        ·不能扩展成可选择的,使一些包含的控件可读写,而其他的控件是只读的;
        ·不显示通过编程方式添加到 container 控件中的控件,读写控件设计器只显示那些从工具箱拖到设计界面上的控件,以及那些按声明式语法添加到 .aspx 页面的控件标签内的控件;
        ·不使用 GetDesignTimeHtml 方法来产生或自定义设计期显示,而是产生一个可编辑的区域,显示所包含控件的设计期表示。 

posted on 2006-02-13 15:48  .............  阅读(148)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3