Ограничения активации на основе правил
Одной из распространенных концепций в VisualStudio.Extensibility является использование правил активации на основе контекста. Эти правила определяют условия, при которых пользователю предоставляется расширение или команда. Пример правила активации на основе контекста — VisibleWhen
это свойство в конфигурации команды, которая объявляет, когда команда становится видимой.
Типы ограничений
Каждое ограничение определяется как экземпляр типа, созданного ActivationConstraint
одним из ActivationConstraint
методов фабрики, например ClientContext
.
Несколько ограничений активации можно объединить с помощью And
Or
методов и Not
методов. Вы также можете объединить ограничения активации с помощью операторов &
и !
|
.
Пример определения
В следующем примере свойство EnabledWhen
конфигурации команд определяет, когда команда находится в состоянии включено. Метод ClientContext
является одним из методов фабрики ограничений активации. Он создает ограничение активации, учитывая два аргумента, шаблон строки и регулярного выражения для сопоставления с этой строкой. Поэтому следующий код указывает, что команда включена, когда пользователь выбирает файл с одним из этих расширений.
public override CommandConfiguration CommandConfiguration => new("%My command.DisplayName%")
{
EnabledWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveSelectionFileName, @"\.(jpg|jpeg|txt)$"),
};
Класс ClientContextKey
предоставляет диапазон сведений о состоянии интегрированной среды разработки, на которые можно протестировать; для таблицы значений см . ключи контекста клиента.
В следующем примере показано, как объединить несколько ограничений:
EnabledWhen = ActivationConstraint.And(
ActivationConstraint.SolutionState(SolutionState.Exists),
ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),
или, более кратко, с помощью &
оператора:
EnabledWhen =
ActivationConstraint.SolutionState(SolutionState.Exists) &
ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),
Свойства ограничения активации
Ограничения активации можно использовать для настройки различных функций VisualStudio.Extensibility, включая загрузку расширения, а также включенное или видимое состояние команды. Типы конфигурации содержат свойство типа ActivationConstraint
, как правило, суффиксом When
, который подразумевает, что что-то активируется при выполнении указанных условий.
Методы фабрики ограничений активации
В этом разделе показан список поддерживаемых в настоящее время ограничений активации. Каждая запись в списке — это метод фабрики ActivationConstraint
для типа.
Срок | Description |
---|---|
ClientContext (<key>=, <pattern>=<ClientContextKey regex>) |
Значение True, если указанный ключ контекста клиента соответствует регулярному выражению. См . ключи контекста клиента. |
ActiveProjectCapability (<expression>=ProjectCapability ) |
True, когда решение имеет проект с возможностями, соответствующими предоставленному подтексту. Выражение может быть примерно таким VB | CSharp . Дополнительные сведения о возможностях проекта см. в обзоре API запросов project. |
ProjectAddedItem (<pattern>=<regex>) |
Термин true, если файл, соответствующий шаблону, добавляется в проект в открываемом решении. |
SolutionHasProjectCapability (<expression>=ProjectCapability ) |
True, когда решение имеет проект с возможностями, соответствующими предоставленному подтексту. Выражение может быть примерно таким VB | CSharp . Дополнительные сведения о возможностях проекта см. в обзоре API запросов project. |
SolutionState (<state>=SolutionState ) |
Значение True, если состояние решения соответствует указанному значению, см . сведения о состояниях решения для списка значений. |
EditorContentType (<contentType>) |
Значение true, если активный тип контента редактора является или наследуется от определенного типа контента. |
По соображениям совместимости также поддерживаются следующие устаревшие ограничения активации:
Срок | Description |
---|---|
ActiveProjectBuildProperty (<property>=<regex>) |
Термин true, если выбранный проект имеет указанное свойство сборки, а значение свойства соответствует предоставленному шаблону regex. |
ActiveProjectFlavor (<guid>) |
True, если выбранный проект имеет вкус, соответствующий заданному идентификатору GUID типа проекта. |
SolutionHasProjectBuildProperty (<property>=<regex>) |
Термин true, если решение имеет загруженный проект с указанным свойством сборки и значением свойства соответствует предоставленному фильтру regex. |
SolutionHasProjectFlavor (<guid>) |
True, если решение имеет проект, который имеет вкус (агрегированный) и имеет вкус, соответствующий заданному идентификатору GUID типа проекта. |
UIContext (<guid>) |
Значение true, если указанный контекст пользовательского интерфейса активен в экземпляре Visual Studio. |
Состояния решения
Состояние решения относится к состоянию решения и его проектам, независимо от того, загружается ли решение, имеет ли он ноль, один или несколько проектов, и независимо от того, выполняется ли она сборка.
Ограничения активации, соответствующие состояниям решения, можно объединить так же, как и любые другие ограничения активации. Например, можно объединить ограничение активации, указывающее FullyLoaded
решение и SingleProject
решение для записи решений с одним проектом при полной загрузке.
this.EnabledWhen = ActivationConstraint.And(
ActivationConstraint.SolutionState(SolutionState.SingleProject),
ActivationConstraint.SolutionState(SolutionState.FullyLoaded));
Ключи контекста клиента
Правила активации также могут использовать содержимое контекста клиента в качестве частей его выражения.
В настоящее время контекст клиента ограничен небольшим набором значений в состоянии интегрированной среды разработки.
Связанный контент
- Компоненты расширения VisualStudio.Extensibility.