규칙 기반 활성화 제약 조건
VisualStudio.Extensibility의 일반적인 개념 중 하나는 컨텍스트 기반 활성화 규칙을 사용하는 것입니다. 확장 또는 명령이 사용자에게 표시되는 조건을 제어하는 규칙입니다. 컨텍스트 기반 활성화 규칙의 예는 VisibleWhen
명령이 표시되면 선언하는 명령 구성의 속성입니다.
제약 조건 형식
각 제약 조건은 ClientContext
과 같이 ActivationConstraint
의 팩터리 메서드 중 하나를 사용하여 만든 ActivationConstraint
형식의 인스턴스로 정의됩니다.
이 And
, Or
, 그리고 Not
메서드를 사용하여 여러 활성화 제약 조건을 함께 결합할 수 있습니다. 연산자 &
, |
, 그리고 !
를 사용하여 활성화 제약 조건을 결합할 수도 있습니다.
예제 정의
다음 예제에서 명령 구성 EnabledWhen
속성은 명령이 사용 상태일 때를 정의합니다. 이 ClientContext
메서드는 활성화 제약 조건 팩터리 메서드 중 하나입니다. 두 인수, 문자열 및 정규식 패턴이 해당 문자열과 일치하는 경우 활성화 제약 조건을 생성합니다. 따라서 다음 코드는 사용자가 해당 확장명 중 하나가 있는 파일을 선택한 경우 명령이 사용하도록 설정되어 있음을 나타냅니다.
public override CommandConfiguration CommandConfiguration => new("%My command.DisplayName%")
{
EnabledWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveSelectionFileName, @"\.(jpg|jpeg|txt)$"),
};
이 클래스는 ClientContextKey
테스트할 수 있는 IDE 상태 정보의 범위를 제공합니다. 값 테이블의 경우 클라이언트 컨텍스트 키를 참조 하세요.
다음 예제에서는 여러 제약 조건을 결합하는 방법을 보여 줍니다.
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 기능을 구성할 수 있습니다. 구성 형식에는 일반적으로 지정된 조건이 충족될 때 활성화되는 것을 의미하는 When
접미사가 있는 ActivationConstraint
형식의 속성이 포함됩니다.
활성화 제약 조건 팩터리 메서드
이 섹션에서는 현재 지원되는 활성화 제약 조건 목록을 보여 줍니다. 목록의 각 항목은 형식의 팩터리 ActivationConstraint
메서드입니다.
용어 | 설명 |
---|---|
ClientContext (<key>=ClientContextKey , <pattern>=<regex>) |
제공된 클라이언트 컨텍스트 키가 정규식과 일치하는 경우 True입니다. 클라이언트 컨텍스트 키를 참조 하세요. |
ActiveProjectCapability (<Expression>=ProjectCapability ) |
솔루션에 제공된 하위 식과 일치하는 기능이 있는 프로젝트가 있을 때마다 True입니다. 식은 VB | CSharp 와 같을 수 있습니다. 프로젝트 기능에 대한 자세한 내용은 Project 쿼리 API 개요를 참조하세요. |
ProjectAddedItem (<pattern>=<regex>) |
이 항은 열린 솔루션에서 프로젝트에 "패턴"과 일치하는 파일이 추가되는 경우 true입니다. |
SolutionHasProjectCapability (<Expression>=ProjectCapability ) |
솔루션에 제공된 하위 식과 일치하는 기능이 있는 프로젝트가 있을 때마다 True입니다. 식은 VB | CSharp 와 같을 수 있습니다. 프로젝트 기능에 대한 자세한 내용은 Project 쿼리 API 개요를 참조하세요. |
SolutionState (<상태>=SolutionState ) |
솔루션 상태가 제공된 값과 일치하는 경우 True이면 값 목록에 대한 솔루션 상태를 참조하세요. |
호환성을 위해 다음과 같은 레거시 활성화 제약 조건도 지원됩니다.
용어 | 설명 |
---|---|
ActiveProjectBuildProperty (<속성>=<정규식>) |
이 항은 선택된 프로젝트에 지정된 빌드 속성이 있고 속성 값이 제공된 regex 패턴과 일치하는 경우 true입니다. |
ActiveProjectFlavor (<guid>) |
선택한 프로젝트에 지정된 프로젝트 형식 GUID와 일치하는 버전이 있을 때마다 True입니다. |
SolutionHasProjectBuildProperty (<속성>=<정규식>) |
이 항은 솔루션에 지정된 빌드 속성을 가진 프로젝트가 로드되어 있고 속성 값이 제공된 regex 필터와 일치하는 경우 true입니다. |
SolutionHasProjectFlavor (<guid>) |
솔루션에 버전이 지정(집계)된 프로젝트가 있고 지정된 프로젝트 형식 GUID와 일치하는 버전이 있는 경우 항상 true입니다. |
솔루션 상태
이 솔루션 상태는 솔루션 및 해당 프로젝트의 상태, 솔루션 로드 여부, 프로젝트가 0개, 1개 또는 여러 개 있는지 여부 및 빌드 여부를 나타냅니다.
솔루션 상태에 해당하는 활성화 제약 조건은 다른 활성화 제약 조건과 동일한 방식으로 결합할 수 있습니다. 예를 들어 FullyLoaded
솔루션과 SingleProject
솔루션을 지정 하는 활성화 제약 조건을 결합하여 단일 프로젝트 솔루션이 완전히 로드될 때 캡처할 수 있습니다.
this.EnabledWhen = ActivationConstraint.And(
ActivationConstraint.SolutionState(SolutionState.SingleProject),
ActivationConstraint.SolutionState(SolutionState.FullyLoaded));
Client context keys
활성화 규칙은 클라이언트 컨텍스트 콘텐츠를 식의 일부로 활용할 수도 있습니다.
현재 클라이언트 컨텍스트는 IDE 상태의 작은 값 집합으로 제한됩니다.