Vincoli di attivazione basati su regole
Uno dei concetti comuni di VisualStudio.Extensibility è l'uso di regole di attivazione basate sul contesto. Queste regole regolano le condizioni in base alle quali viene rilevata un'estensione o un comando all'utente. Un esempio di regola di attivazione basata sul contesto è la VisibleWhen
proprietà nella configurazione di un comando che dichiara quando il comando viene reso visibile.
Ogni vincolo viene definito come un'istanza del ActivationConstraint
tipo creato con uno dei ActivationConstraint
metodi factory di , ad esempio ClientContext
.
È possibile combinare più vincoli di attivazione usando i And
metodi , Or
e Not
. È anche possibile combinare vincoli di attivazione usando operatori &
, |
e !
.
Nell'esempio seguente la proprietà EnabledWhen
di configurazione del comando definisce quando il comando si trova nello stato abilitato. Il ClientContext
metodo è uno dei metodi factory del vincolo di attivazione. Genera il vincolo di attivazione, dato i due argomenti, una stringa e un criterio di espressione regolare per la corrispondenza con tale stringa. Di conseguenza, il codice seguente indica che un comando è abilitato quando l'utente seleziona un file con una di queste estensioni.
public override CommandConfiguration CommandConfiguration => new("%My command.DisplayName%")
{
EnabledWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveSelectionFileName, @"\.(jpg|jpeg|txt)$"),
};
La ClientContextKey
classe fornisce l'intervallo di informazioni sullo stato dell'IDE che è possibile testare. Per una tabella di valori, vedere Chiavi di contesto client.
L'esempio seguente illustra come combinare più vincoli:
EnabledWhen = ActivationConstraint.And(
ActivationConstraint.SolutionState(SolutionState.Exists),
ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),
o, più concisamente, usando l'operatore &
:
EnabledWhen =
ActivationConstraint.SolutionState(SolutionState.Exists) &
ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),
I vincoli di attivazione possono essere usati per configurare un'ampia gamma di funzionalità di VisualStudio.Extensibility, tra cui il caricamento di un'estensione e lo stato abilitato o visibile di un comando. I tipi di configurazione contengono proprietà di tipo ActivationConstraint
, in genere con un When
suffisso che implica l'attivazione di un elemento quando vengono soddisfatte le condizioni specificate.
Questa sezione mostra l'elenco dei vincoli di attivazione attualmente supportati. Ogni voce nell'elenco è un metodo factory sul ActivationConstraint
tipo .
Termine | Descrizione |
---|---|
ClientContext (<key>=ClientContextKey , <pattern>=<regex>) |
True quando la chiave di contesto client specificata corrisponde all'espressione regolare. Vedere chiavi di contesto client. |
ActiveProjectCapability (<expression>=ProjectCapability ) |
True ogni volta che la soluzione ha un progetto con funzionalità corrispondenti alla sottoespressione specificata. Un'espressione può essere simile VB | CSharp a . Per altre informazioni sulle funzionalità del progetto, vedere Panoramica dell'API query di Project. |
ProjectAddedItem (<pattern>=<regex>) |
Il termine è true quando un file corrispondente al "pattern" viene aggiunto a un progetto nella soluzione aperta. |
SolutionHasProjectCapability (<expression>=ProjectCapability ) |
True ogni volta che la soluzione ha un progetto con funzionalità corrispondenti alla sottoespressione specificata. Un'espressione può essere simile VB | CSharp a . Per altre informazioni sulle funzionalità del progetto, vedere Panoramica dell'API query di Project. |
SolutionState (<state>=SolutionState ) |
True quando lo stato della soluzione corrisponde al valore specificato, vedere stati della soluzione per l'elenco di valori. |
EditorContentType (<contentType>) |
True se il tipo di contenuto dell'editor attivo è o eredita da un tipo di contenuto specifico. |
Per motivi di compatibilità, sono supportati anche i vincoli di attivazione legacy seguenti:
Termine | Descrizione |
---|---|
ActiveProjectBuildProperty (<property>=<regex>) |
Il termine è true quando il progetto selezionato ha la proprietà di compilazione specificata e il valore della proprietà corrisponde al modello regex specificato. |
ActiveProjectFlavor (<guid>) |
True ogni volta che il progetto selezionato ha un sapore corrispondente al GUID del tipo di progetto specificato. |
SolutionHasProjectBuildProperty (<property>=<regex>) |
Il termine è true quando la soluzione ha un progetto caricato con la proprietà di compilazione e il valore della proprietà specificati corrisponde al filtro regex fornito. |
SolutionHasProjectFlavor (<guid>) |
True ogni volta che una soluzione ha un progetto con sapore (aggregato) e ha un sapore corrispondente al GUID del tipo di progetto specificato. |
UIContext (<guid>) |
True se il contesto dell'interfaccia utente specificato è attivo nell'istanza di Visual Studio. |
Lo stato della soluzione si riferisce allo stato della soluzione e ai relativi progetti, indipendentemente dal fatto che una soluzione venga caricata, indipendentemente dal fatto che abbia zero, uno o più progetti e se si sta compilando.
I vincoli di attivazione che corrispondono agli stati della soluzione possono essere combinati nello stesso modo di qualsiasi altro vincolo di attivazione. Ad esempio, è possibile combinare un vincolo di attivazione che specifica una FullyLoaded
soluzione e una SingleProject
soluzione per acquisire soluzioni a progetto singolo quando vengono caricate completamente.
this.EnabledWhen = ActivationConstraint.And(
ActivationConstraint.SolutionState(SolutionState.SingleProject),
ActivationConstraint.SolutionState(SolutionState.FullyLoaded));
Le regole di attivazione possono anche usare il contenuto del contesto client come parti dell'espressione.
Attualmente, il contesto client è limitato a un piccolo set di valori nello stato IDE.
- Componenti di un'estensione VisualStudio.Extensibility.