设计器,如编辑器,通常需要支持取消操作,以便用户可撤消它们的最新更改,当修改代码元素。
在 Visual Studio 中实现的大多数设计器有取消支持自动提供由环境。
需要提供的设计器实现取消功能支持:
可以通过取消管理通过实现抽象基类 UndoEngine
提供持久性和 CodeDOM 通过实现 IDesignerSerializationService 和 IComponentChangeService 类支持。
有关使用 .NET Framework编写设计器的更多信息,请参见 扩展设计时支持。
Visual Studio SDK 提供一个默认取消基础结构:
通过 OleUndoEngine 和 UndoUnit 类取消管理实现。
提供的持久性和 CodeDOM 将默认 CodeDomComponentSerializationService 和 IComponentChangeService 实现支持。
获取取消自动支持
在 Visual Studio 创建的所有设计器都具有自动和完整取消支持,则,设计器:
利用其用户界面的 Control 基类。
使用标准基于 CodeDOM 的代码生成和代码生成和持久性的分析系统。
有关与 Visual Studio 结合使用的更多信息,请参见 动态源代码生成和编译CodeDOM 支持
使用显式设计器何时请取消支持
设计器必须为这些标记来取消管理,如果应用程序使用图形用户界面 (gui),称为视图 " 适配器,除了提供该 UI 由 Control。
此示例可能创建产品使用基于 web 的图形设计接口而不是 .NET Framework 基于图形界面。
在这种情况下,使用 ProvideViewAdapterAttribute,将需要注册了 Visual Studio 的视图适配器,并提供显式移除管理。
设计器需要提供 CodeDOM,并继续时支持,如果是在 System.CodeDom 命名空间不使用提供的 Visual Studio 代码生成模型。
取消支持设计器的功能
环境 SDK 提供可由设计器使用不使用 Control 基类为用户界面或标准 CodeDOM 以及持久性设计必需的接口的默认实现提供取消支持。
OleUndoEngine 类从 .NET Framework UndoEngine 类派生使用 IOleUndoManager 类的实现托管取消操作。
Visual Studio 提供以下功能。设计器移除:
链接撤消在进行大量设计器中的功能。
在设计器中子单元可以与其父交互通过实现 IOleUndoUnit 和 IOleParentUndoUnit 在 UndoUnit。
环境 SDK 提供 CodeDOM,并继续时通过提供支持:
Visual Studio 设计宿主提供的 IComponentChangeService 。
使用环境提供 SDK 功能请取消支持
若要获取请取消支持,实现设计器的对象必须:
实例化和初始化 OleUndoEngine 类的实例与有效的 IServiceProvider 实现的。
此 IServiceProvider 类必须提供下列服务:
-
使用 Visual Studio CodeDOM 序列化的设计器可以选择使用 CodeDomComponentSerializationService 随 Visual Studio SDK 作为其 IDesignerSerializationService的实现。
在这种情况下, IServiceProvider 类提供给 OleUndoEngine 构造函数应返回此对象作为 IDesignerSerializationService 类的实现。
-
使用默认 DesignSurface 的设计器提供的 Visual Studio 设计宿主确保具有 IComponentChangeService 类的默认实现。
实现 OleUndoEngine 的设计器基于自动移除 framework 跟踪更改,则:
属性更改。 TypeDescriptor 对象进行。
,在不进行的更改时,IComponentChangeService 事件手动生成。
在设计器中修改在 DesignerTransaction的上下文中创建的。
设计器选择显式创建抵消单位使用该标准取消 UndoUnit 的实现或 visual studio 特定实现提供的单元 UndoUnit,从 UndoUnit 派生并提供 IOleUndoUnit 和 IOleParentUndoUnit的实现。