Ograniczenia aktywacji oparte na regułach
Jedną z typowych pojęć w programie VisualStudio.Extensibility jest użycie reguł aktywacji opartych na kontekście. Są to reguły, które określają warunki, w których rozszerzenie lub polecenie jest udostępniane użytkownikowi. Przykładem reguły aktywacji opartej na kontekście jest VisibleWhen
właściwość w konfiguracji polecenia, która deklaruje, gdy polecenie jest widoczne.
Typy ograniczeń
Każde ograniczenie jest definiowane jako wystąpienie ActivationConstraint
typu utworzonego przy użyciu jednej z ActivationConstraint
metod fabrycznych, takich jak ClientContext
.
Wiele ograniczeń aktywacji można łączyć ze sobą przy użyciu And
metod , Or
i Not
. Ograniczenia aktywacji można również łączyć przy użyciu operatorów &
, |
i !
.
Przykładowa definicja
W poniższym przykładzie właściwość EnabledWhen
konfiguracji polecenia określa, kiedy polecenie jest w stanie włączonym. Metoda ClientContext
jest jedną z metod fabryki ograniczeń aktywacji. Generuje ograniczenie aktywacji, biorąc pod uwagę dwa argumenty, ciąg i wzorzec wyrażenia regularnego, aby dopasować się do tego ciągu. W związku z tym poniższy kod wskazuje, że polecenie jest włączone, gdy użytkownik wybrał plik z jednym z tych rozszerzeń.
public override CommandConfiguration CommandConfiguration => new("%My command.DisplayName%")
{
EnabledWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveSelectionFileName, @"\.(jpg|jpeg|txt)$"),
};
Klasa ClientContextKey
zawiera zakres informacji o stanie środowiska IDE, względem których można testować. Aby uzyskać tabelę wartości, zobacz Klucze kontekstu klienta.
W poniższym przykładzie pokazano, jak połączyć wiele ograniczeń:
EnabledWhen = ActivationConstraint.And(
ActivationConstraint.SolutionState(SolutionState.Exists),
ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),
lub, bardziej zwięźle, przy użyciu &
operatora :
EnabledWhen =
ActivationConstraint.SolutionState(SolutionState.Exists) &
ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),
Właściwości ograniczenia aktywacji
Ograniczenia aktywacji mogą służyć do konfigurowania różnych funkcji VisualStudio.Extensibility, w tym ładowania rozszerzenia oraz stanu włączonego lub widocznego polecenia. Typy konfiguracji zawierają właściwość typu ActivationConstraint
, zazwyczaj z sufiksem When
, który oznacza, że coś aktywuje się, gdy określone warunki są spełnione.
Metody fabryki ograniczeń aktywacji
W tej sekcji przedstawiono listę aktualnie obsługiwanych ograniczeń aktywacji. Każdy wpis na liście jest metodą fabryki w typie ActivationConstraint
.
Okres | opis |
---|---|
ClientContext (<key>=ClientContextKey , <pattern>=<regex>) |
Wartość true, gdy podany klucz kontekstu klienta jest zgodny z wyrażeniem regularnym. Zobacz Klucze kontekstu klienta. |
ActiveProjectCapability (<expression>=ProjectCapability ) |
Prawda, gdy rozwiązanie ma projekt z możliwościami zgodnymi z podanym podrażeniem. Wyrażenie może być podobne do VB | CSharp . Aby uzyskać więcej informacji na temat możliwości projektu, zobacz Omówienie interfejsu API zapytań projektu. |
ProjectAddedItem (<pattern>=<regex>) |
Termin ma wartość true, gdy plik pasujący do "wzorca" jest dodawany do projektu w otwartym rozwiązaniu. |
SolutionHasProjectCapability (<expression>=ProjectCapability ) |
Prawda, gdy rozwiązanie ma projekt z możliwościami zgodnymi z podanym podrażeniem. Wyrażenie może być podobne do VB | CSharp . Aby uzyskać więcej informacji na temat możliwości projektu, zobacz Omówienie interfejsu API zapytań projektu. |
SolutionState (<state>=SolutionState ) |
Prawda, gdy stan rozwiązania jest zgodny z podaną wartością, zobacz Stany rozwiązania, aby uzyskać listę wartości. |
Ze względów zgodności obsługiwane są również następujące starsze ograniczenia aktywacji:
Okres | opis |
---|---|
ActiveProjectBuildProperty (<property>=<regex>) |
Termin ma wartość true, gdy wybrany projekt ma określoną właściwość kompilacji, a wartość właściwości jest zgodna z podanym wzorcem wyrażenia regularnego. |
ActiveProjectFlavor (<guid>) |
Wartość true zawsze, gdy wybrany projekt ma smak pasujący do podanego identyfikatora GUID typu projektu. |
SolutionHasProjectBuildProperty (<property>=<regex>) |
Termin ma wartość true, gdy rozwiązanie ma załadowany projekt z określoną właściwością kompilacji i wartością właściwości pasuje do podanego filtru regex. |
SolutionHasProjectFlavor (<guid>) |
Prawda, gdy rozwiązanie ma projekt o smaku (zagregowanym) i ma smak pasujący do danego identyfikatora GUID typu projektu. |
Stany rozwiązania
Stan rozwiązania odnosi się do stanu rozwiązania i jego projektów, niezależnie od tego, czy rozwiązanie jest ładowane, czy ma zero, jeden, czy wiele projektów i czy jest kompilowany.
Ograniczenia aktywacji, które odpowiadają stanom rozwiązania, można łączyć w taki sam sposób, jak w przypadku innych ograniczeń aktywacji. Można na przykład połączyć ograniczenie aktywacji, które określa FullyLoaded
rozwiązanie i SingleProject
rozwiązanie do przechwytywania rozwiązań jednoprojektowych po ich pełnym załadowaniu.
this.EnabledWhen = ActivationConstraint.And(
ActivationConstraint.SolutionState(SolutionState.SingleProject),
ActivationConstraint.SolutionState(SolutionState.FullyLoaded));
Klucze kontekstu klienta
Reguły aktywacji mogą również używać zawartości kontekstu klienta jako części wyrażenia.
Obecnie kontekst klienta jest ograniczony do małego zestawu wartości w stanie IDE.
Powiązana zawartość
- Składniki rozszerzenia VisualStudio.Extensibility.