设计器初始化和元数据配置

元数据和筛选器特性的过程与设计器或设计器组件为应用程序定义哪些工具由处理不同的 Type 对象的特定设计器使用 (例如数据结构、类或图形实体),那么,当设计器可用时,,以及如何提供框架配置 Visual Studio IDE 支持例如 工具箱 类别或选项才可用) 的设计器 (。

Visual Studio SDK 提供几种机制由 VSPackage 实现设计器的或设计器组件的初始化的控件及其元数据的过程。

初始化的元数据和配置信息

由于它们加载了在需要时, Vspackage 不可由 Visual Studio 环境加载了在设计器中实例化之前。 因此, Vspackage 不能用于配置一个设计器或设计器组件使用标准机制中创建,是处理DesignerCreated  事件。 相反,设计图面扩展, VSPackage 实现 DesignSurfaceExtension 接口和注册的实例提供自定义项,称为 "。

自定义初始化

自定义设计器,组件或设计器图面,包括:

  1. 修改设计器元数据和活动更改某 Type 如何访问或转换。

    这是通过 UITypeEditorTypeConverter 结构通常执行。

    例如,那么,当 System.Windows.Forms基于设计器初始化, Visual Studio 环境修改 Image 对象的 UITypeEditor 用于在设计器中使用资源管理器获取位图而不是文件系统。

  2. ,例如,与集成环境通过订阅事件或获取项目配置信息。 可以获取项目配置信息并订阅事件通过获取 ITypeResolutionService 接口。

  3. 用户环境的修改按激活的相应 工具箱 类别或通过限制设计器的适用通过应用 ToolboxItemFilterAttribute 类的实例于设计器。

设计器初始化由 VSPackage

VSPackage 如果处理设计器初始化:

  1. 创建实现 DesignSurfaceExtension 类的对象。

    备注

    在对象不应实现 DesignSurfaceExtension 类和 Package 类同名。

  2. 实现 DesignSurfaceExtension 的类作为提供 VSPackage 的设计器扩展支持通过应用 DesignSurfaceExtensionAttribute实例的注册, ProvideObjectAttributeProvideServiceAttribute 对提供 Package的 VSPackage 中实现的类。

只要所有设计器或设计器组件后, Visual Studio 环境:

  1. 访问每个注册设计图面扩展提供程序。

  2. 实例化和初始化每个实例设计图面扩展提供程序的 DesignSurfaceExtension 对象

  3. 调用每个设计图面扩展提供程序的 OnDesignerCreated 方法或 OnComponentCreated 方法 (根据需要)。

当实现 DesignSurfaceExtension 对象作为 VSPackage 的成员时,了解这一点很重要的:

  1. Visual Studio 环境不允许对什么元数据的任何控件或其他配置设置特定 DesignSurfaceExtension 提供程序的修改。 用于修改相同的设计器功能。冲突的方式的两个或多个 DesignSurfaceExtension 提供程序是可以的,如果最终修改是显式的。 最后将修改的是不确定的。

  2. 通过将 ToolboxItemFilterAttribute 实例显式限制 DesignSurfaceExtension 对象的实现对特定设计器的是可能的,在实现。 有关筛选 工具箱 的项目的更多信息,请参见 ToolboxItemFilterAttributeToolboxItemFilterType

其他元数据设置

除了在设计时外, VSPackage 中更改设计器或设计器组件的配置。

可以使用 ProvideDesignerMetadataAttribute 类以编程方式或适用于提供设计器的 VSPackage。

ProvideDesignerMetadataAttribute 类的实例用于修改在模型中创建的组件元数据图面。 例如,可使用自定义属性浏览器替换 CommonDialog 对象使用的默认属性浏览器,。

ProvideDesignerMetadataAttribute 实例提供的修改应用于 Package 的 VSPackage 中实现可以具有两个范围之一:

  • 全局--为特定元素的所有新实例

  • 本地--仅与在模型中创建的组件的实例图面提供由当前 VSPackage。

ProvideDesignerMetadataAttribute 实例的 IsGlobal 属性应用于 Package 的 VSPackage 中实现确定此范围。

将特性应用于 Package 的实现与下面设置为 true, ProvideDesignerMetadataAttribute 对象的 IsGlobal 属性,更改整个 Visual Studio 环境的浏览器:

       [ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=true)]

       internal class MyPackage : Package {}

如果全局标志设置为 false,则元数据来更改仅限于向当前 VSPackage 支持的枚举当前设计器:

       [ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=false)]

       internal class MyPackage : Package {}

备注

当前,该设计图面仅支持创建组件,只有元素可以具有本地元数据。在上面的示例中,我们将尝试修改一个属性,例如对象的 Color 属性。如果 false 全局标志已通过, CustomBrowser 不会出现,因为设计器不实际创建 Color实例。设置为 false 的全局标志为元素非常有用,例如控件、计时器和对话框。

请参见

参考

DesignSurfaceExtension

DesignSurfaceExtensionAttribute

ToolboxItemFilterType

其他资源

扩展设计时支持