Команды конструктора и объектная модель DesignerAction для Windows Forms
Команды конструктора и объектная модель DesignerAction предоставляют общий способ задания набора действий для компонента во время разработки. Пользователи могут получить доступ к этим действиям из рабочей области конструирования, щелкнув глиф смарт-тега компонента () и выбрав одно из предложенных действий в области смарт-тега. Данная модель объединяет различные способы предоставления конструктором команд пользователям.
Смарт-теги
Функция смарт-тегов позволяет компонентам и элементам управления отображать для пользователей контекстные данные и команды. Смарт-тег можно представить как замену команд конструктора, поскольку можно настроить отображение элемента смарт-тега в области смарт-тега, а также в контекстном меню, сопоставленном с компонентом или элементом управления.
Полный пример способов реализации смарт-тегов см. в разделе Практическое руководство. Вложение смарт-тегов в компонент Windows Forms.
Классы команд конструктора
В следующей таблице описываются способы представления команд конструктора пользователю во время разработки компонентов и элементов управления:
Класс |
Описание |
---|---|
Делегат, прикрепленный к идентификатору команды. Он не определяет текст команды, его местоположение или какие-либо другие метаданные. |
|
Команда меню, определяющая его текст и другие метаданные. Команды обычно предоставляются для конкретного конструктора и изменяются в зависимости от используемого конструктора. Команды конструктора обычно отображаются в контекстном меню или в меню Вид в строке главного меню. |
|
Команда меню, определяющая текст и другие метаданные для описания целевого действия, которое можно выполнить. Обычно действия предлагают пользователю пройти некоторый процесс, состоящий из нескольких шагов, например настроить для компонента источник данных. |
Модель внедрения и модель извлечения
В следующей таблице приведены две модели для программного доступа к командам конструктора:
Модель |
Описание |
---|---|
Внедрения |
Конструктор явно запрашивает службу и добавляет в нее команды. |
Извлечения |
Служба запрашивает у конструктора предоставляемые им команды. |
Объединение существующих команд
Команды, приведенные в предыдущей таблице классов команд конструктора, имеют много общего. Их объединяет API DesignerAction, позволяющий использовать общую модель для предоставления команд пользователям конструктора.
Примечание
Не все конструкторы поддерживают все модели.Конструктор может отправить запрос о доступной поддержке и соответствующим образом изменить способ предоставления команд.Кроме того, модели внедрения и извлечения могут поддерживаться не для всех типов команд.Не все конструкторы предоставляют действия конструктора как смарт-теги.Например, некоторые конструкторы могут предоставлять действия конструктора в окне инструментов.
Объектная модель DesignerAction
В следующей таблице описываются важные классы, реализующие объектную модель DesignerAction:
Класс |
Описание |
---|---|
Представляет элемент области в области смарт-тега. |
|
Определяет список элементов, используемых для создания области смарт-тега. |
|
Устанавливает службу времени разработки, которая управляет коллекцией объектов DesignerActionItem для компонентов. |
|
Представляет статический текстовый элемент в области. Является производным от DesignerActionItem. |
|
Представляет элемент области, сопоставленный со свойством в классе, производном от класса DesignerActionList. Является производным от DesignerActionItem. |
|
Представляет элемент области, сопоставленный с методом в классе, производном от класса DesignerActionList. Является производным от DesignerActionItem. |
|
Представляет элемент статического заголовка в области смарт-тега. Является производным от DesignerActionTextItem. |
Использование объектной модели DesignerAction
Чтобы включить действия конструктора для компонента или элемента управления, осуществите наследование от базового класса DesignerActionList. Используйте этот производный класс для заполнения области смарт-тега, представляющей пользовательский интерфейс в форме меню.
Этот производный класс может переопределять метод virtual GetSortedActionItems для возвращения коллекции объектов, производных от объекта DesignerActionItem. Эти объекты представляют элементы области. Каждый из элементов отображается в области в соответствии с его типом. Например, объект DesignerActionTextItem отображается как метка статического текста. Элементы активной области, представленные типами DesignerActionPropertyItem и DesignerActionMethodItem, имеют свойство или метод открытого доступа соответственно, в которых реализуется функциональность для этого элемента.
После создания производного класса его можно добавить в элемент управления двумя способами:
При использовании модели извлечения экземпляр производного класса добавляется в свойство ActionLists класса ComponentDesigner. Это предоставляет способ наследования классов для обеспечения доступа к другим спискам действий и объединения их элементов.
При использовании модели внедрения вызывается Add для добавления экземпляра производного класса в коллекцию, содержащуюся в глобальном классе DesignerActionService. Эти списки действий объединяются со списками из коллекции, содержащейся в глобальном классе ComponentDesigner.
Класс DesignerActionPropertyItem представлен в конструкторе соответствующим классом UITypeEditor. Класс DesignerActionMethodItem представлен в конструкторе активным элементом пользовательского интерфейса, например гиперссылкой, вызывающей предоставленный программистом метод. Реализация метода GetSortedActionItems списка действий возвращает свойства и методы в том порядке, в котором они должны отображаться в области смарт-тега.
Полный пример реализации смарт-тегов см. в разделе Практическое руководство. Вложение смарт-тегов в компонент Windows Forms.
Существующие команды в списках действий
Элементам управления и компонентам с существующими реализациями DesignerVerb автоматически предоставляется поддержка DesignerActionList. Среда разработки отправляет в конструктор компонента запрос на получение списка действий; если такой список отсутствует, создается новый список для существующих команд.
Элементы списка действий в контекстном меню
Если необходимо, чтобы элемент отображался как в контекстном меню, так и в списке действий, можно задать флаг IncludeAsDesignerVerb для класса DesignerActionMethodItem.
Когда выполнен вызов Add, список действий проверяется на наличие DesignerActionMethodItem с установленным флагом IncludeAsDesignerVerb. Если флаг установлен, для этого элемента вызывается метод AddVerb, добавляющий его в команды компонента и, следовательно, в его контекстное меню.
Изменение типов команд конструктора
Классы MenuCommand и DesignerVerb из платформы .NET Framework версии 1.1 были немного изменены для обеспечения поддержки объектной модели DesignerAction. Теперь оба типа представляют новое свойство, называемое Properties, которое является объектом IDictionary, хранящим все общие свойства для объекта команды. Ключ словаря является именем общего свойства. Это предоставляет универсальный способ перечисления свойств и образует единообразную среду, которая позволяет добавлять новые свойства без изменения определения класса.
Кроме того, класс MenuCommandService предоставляет стандартную реализацию интерфейса IMenuCommandService и выполняет правильную интеграцию команд. Этот класс вызывает события, уведомляющие о добавлении или удалении команд. С помощью этого класса можно создать пользовательский интерфейс, основанный на результатах таких событий. В контейнере службы доступен как MenuCommandService, так и IMenuCommandService.
См. также
Задачи
Практическое руководство. Вложение смарт-тегов в компонент Windows Forms