Поделиться через


Настройка инициализации и метаданных конструктора

Обработка атрибутов метаданных и фильтров, связанных с компонентом конструктора или конструктора, предоставляет механизм для определения средств, используемых определенным конструктором для обработки различных Type объектов (таких как структуры данных, классы или графические сущности), когда конструктор доступен, и как интегрированная среда разработки Visual Studio настроена для поддержки конструктора (например , категория элементов или вкладка).

Пакет SDK Visual Studio предоставляет несколько механизмов для упрощения управления инициализацией или инициализацией компонента конструктора и обработкой метаданных с помощью VSPackage.

Инициализация метаданных и сведений о конфигурации

Так как они загружаются по запросу, vsPackages могут не загружаться средой Visual Studio до создания экземпляра конструктора. Поэтому VSPackages не может использовать стандартный механизм для настройки компонента конструктора или конструктора при создании, который предназначен для обработки DesignerCreated события. Вместо этого VSPackage реализует экземпляр DesignSurfaceExtension интерфейса и регистрирует себя для предоставления настроек, называемого расширениями поверхности конструктора.

Настройка инициализации

Настройка конструктора, компонента или области конструктора включает в себя:

  1. Изменение метаданных конструктора и эффективное изменение способа доступа или преобразования определенного Type элемента.

    Обычно это делается через UITypeEditor механизмы или TypeConverter механизмы.

    Например, при System.Windows.Formsинициализации конструкторов на основе Visual Studio среда UITypeEditor Изменяет объекты, используемые с конструктором, чтобы использовать диспетчер ресурсов для Image получения растровых карт, а не файловой системы.

  2. Интеграция с средой, например путем подписки на события или получения сведений о конфигурации проекта. Вы можете получить сведения о конфигурации проекта и подписаться на события, получив ITypeResolutionService интерфейс.

  3. Изменение пользовательской среды путем активации соответствующих категорий элементов или ограничения применимости конструктора путем применения экземпляра ToolboxItemFilterAttribute класса к конструктору.

Инициализация конструктора с помощью VSPackage

VSPackage должен обрабатывать инициализацию конструктора следующими способами:

  1. Создание объекта, реализующего DesignSurfaceExtension класс.

    Примечание.

    Класс DesignSurfaceExtension никогда не должен быть реализован в том же объекте Package , что и класс.

  2. Регистрация класса, реализующего DesignSurfaceExtension как поддержку расширений конструктора VSPackage. Зарегистрируйте класс, применяя экземпляры DesignSurfaceExtensionAttribute, ProvideObjectAttributeа также ProvideServiceAttribute к классу, который предоставляет реализацию PackageVSPackage.

Каждый раз, когда создается компонент конструктора или конструктора, среда Visual Studio:

  • Обращается к каждому зарегистрированным поставщику расширений поверхности конструктора.

  • Создает экземпляр и инициализирует экземпляр каждого объекта поставщика расширения поверхности конструктора DesignSurfaceExtension .

  • Вызывает метод или OnComponentCreated метод каждого поставщика расширения поверхности конструктора OnDesignerCreated (по мере необходимости).

При реализации DesignSurfaceExtension объекта в качестве члена VSPackage важно понимать следующее:

  • Среда Visual Studio не предоставляет никакого контроля над тем, какие метаданные или другие параметры конфигурации изменяются определенным DesignSurfaceExtension поставщиком. Это возможно для двух или нескольких DesignSurfaceExtension поставщиков, изменяющих одну и ту же функцию конструктора конфликтующими способами, с окончательным изменением является окончательным. Он определяет, какое изменение применяется в последний раз.

  • Можно явно ограничить реализацию DesignSurfaceExtension объекта конкретным конструкторам, применяя экземпляры ToolboxItemFilterAttribute к этой реализации. Дополнительные сведения о фильтрации элементов панели элементов см. в ToolboxItemFilterAttribute разделе и ToolboxItemFilterType.

Дополнительная подготовка метаданных

VSPackage может изменить конфигурацию конструктора или компонента конструктора, отличного от времени разработки.

Класс ProvideDesignerMetadataAttribute можно использовать программным способом или применять к VSPackage, который предоставляет конструктор.

Экземпляр ProvideDesignerMetadataAttribute класса используется для изменения метаданных компонентов, созданных на поверхности конструктора. Например, можно заменить браузер свойств по умолчанию, используемый CommonDialog объектами в пользовательском браузере свойств.

Изменения, предоставляемые экземпляром, примененным ProvideDesignerMetadataAttribute к реализации Package VSPackage, могут иметь одну из двух областей:

  • Глобальный — для всех новых экземпляров данного компонента

  • Локальный — относится только к экземпляру компонента, созданному на поверхности конструктора, предоставленной текущим VSPackage.

Свойство IsGlobal экземпляра, примененного ProvideDesignerMetadataAttribute к реализации Package VSPackage, определяет эту область.

Применение атрибута к реализации Package свойства IsGlobal ProvideDesignerMetadataAttribute объекта, заданного trueниже, изменяет браузер для всей среды 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 полезно для компонентов, таких как элементы управления, таймеры и диалоговые окна.