Condividi tramite


Come Vspackage aggiunge gli elementi dell'interfaccia utente dell'IDE

Un VSPackage possibile aggiungere gli elementi dell'interfaccia (UI) utente, ad esempio, i menu, le barre degli strumenti e le finestre degli strumenti, all'ambiente di sviluppo integrato di (IDE) Visual Studio.

Principi architetturali

Il set di regole e di strutture che consentono a un VSPackage per personalizzare l'interfaccia utente denominato l'architettura della Tabella dei comandi. L'architettura della Tabella del comando è basata per seguenti principi di progettazione:

  • L'interfaccia utente non deve essere stipata di o confondente.

  • L'interfaccia utente deve essere dinamica, non statica.

  • L'interfaccia utente deve essere personalizzabile.

  • L'interfaccia utente deve essere utile.

L'interfaccia utente non deve essere stipata di o confondente

  • Varie Vspackage può essere installato nella sessione di Visual Studio che ospita il package VS. Quando il package VS aggiunti i controlli, non deve interrompere Vspackage già installato, ma è possibile rendere disponibili le funzionalità di un Vspackage e consentire loro di semplificare le funzionalità di modifica.

  • Ogni menu, se si accede tramite la barra dei menu principale, un sottomenu, o un menu di scelta rapida, può contenere le voci di menu fornite dall'altro package VS. Di conseguenza, in un file .vsct, il comando di stampa viene visualizzato come '&Print'. Se troppi controlli visualizzati contemporaneamente, l'interfaccia utente può confondere gli utenti.

L'interfaccia utente deve essere dinamica, non statica

  • I controlli possono essere visualizzati o nascosti in qualsiasi momento, a seconda dello stato dei dati sottostanti e dell'utente corrente.

  • Un VSPackage sia abilitato per modificare l'etichetta di un elemento dell'interfaccia utente e al contenuto del relativo caselle combinate o menu.

  • Gli elementi di interfaccia utente possono essere aggiunti o rimossi quando il package VS viene utilizzato.

  • Gli elementi di interfaccia utente possono richiedere ulteriori chiamate al package VS di popolare i valori o di rilevare lo stato corrente. Esempi di questi elementi includono elenchi dei file (MRU) utilizzati di recente, caselle combinate e dei selettori di colore o trama.

  • Può migliorare l'esperienza utente per aggiungere il comando di menu nell'altro package VS. Ad esempio, se il comando specificata è simile a copia, è possibile inserire il comando in ogni package VS in cui copia viene visualizzato.

L'interfaccia utente deve essere personalizzabile

  • In qualsiasi momento, un utente può personalizzare gli elementi dell'interfaccia utente nel package VS, ad esempio, aggiungendo un pulsante a una finestra degli strumenti o ridisponendo un menu. Tuttavia, in alcuni casi, può essere opportuno disabilitare la personalizzazione.

  • Alcuni controlli sono disponibili solo tramite la personalizzazione, ovvero un comando potrebbe non essere disponibile in un menu o una barra degli strumenti fino a quando un utente non è stato aggiunto mediante la finestra di dialogo personalizzare .

  • In qualsiasi momento, un utente può personalizzare le scelte rapide da tastiera per i controlli, insieme ai tasti di scelta rapida dei controlli che derivano da Visual Studio e un altro package VS.

  • I controlli possono essere eseguiti utilizzando la finestra di commando. Di conseguenza, l'ide necessario sapere quale comando corrisponde a un'etichetta particolare di comando. L'ide ottenere questo risultato tramite un processo noto come i nomi canonici, dove gli spazi vengono rimossi per comprimere un nome del comando in una singola parola. Ad esempio, dei nomi canonici di “aperto &File„ è “FileOpen„.

L'interfaccia utente deve essere utile

  • La maggior parte degli elementi di interfaccia utente devono avere descrizioni comandi.

  • Per ottenere prestazioni migliori, il package VS deve essere caricato solo quando una delle relative funzioni viene richiamata. Questo processo è noto come “caricamento ritardato.„

  • Le aggiunte alle risorse di un VSPackage devono essere localizzabili.

  • È possibile utilizzare le bitmap incluse in Visual Studio oppure fornire diventi proprietaria.

L'architettura della Tabella dei comandi di Visual Studio

Come già accennato, l'architettura della Tabella di comando supporta i principi architetturali precedenti. I principi delle astrazioni, le strutture di dati e gli strumenti dell'architettura della Tabella dei comandi sono le seguenti:

  • Esistono tre tipi di elementi di base: menu, controlli e gruppi. I menu possono essere esposti nell'interfaccia utente quali i menu, i menu, barre degli strumenti, o finestre degli strumenti. I controlli sono routine che l'utente può eseguire nell'IDE e possono essere esposti come voci di menu, pulsanti, caselle di riepilogo, o altri controlli. I gruppi sono contenitori per i menu e i controlli.

  • Ogni elemento viene specificato tramite una definizione che descrive l'elemento, la priorità rispetto agli altri elementi e i flag che modificano il comportamento.

  • Ogni elemento ha una posizione che descrive il padre dell'elemento. Un elemento può contenere elementi padre più, può essere presenti in più posizioni nell'interfaccia utente.

    Ogni comando deve disporre di un gruppo come relativo padre, anche se è il solo figlio nel gruppo. Ogni menu standard inoltre necessario disporre di un gruppo padre. Le barre degli strumenti e le finestre degli strumenti fungono dai propri elementi padre. Un gruppo può avere come relativo padre la barra dei menu principale di Visual Studio, o qualsiasi menu, la barra degli strumenti, o finestra degli strumenti.

Come gli elementi vengono definiti

. I file di Vsct vengono formattati in XML. Un file di .vsct definisce gli elementi di interfaccia utente per un pacchetto e determina la posizione in cui gli elementi vengono visualizzati nell'IDE. Ogni menu, gruppo, o comando nel pacchetto viene inizialmente assegnato un GUID e un ID nella sezione di Symbols . In tutto il resto del file di .vsct, ogni menu, comandi e gruppo viene identificato dalla combinazione di ID e di GUID. Nell'esempio seguente viene illustrata una sezione tipica di Symbols come generata dal modello del pacchetto di Visual Studio quando comando di menu viene selezionato nel modello.

<Symbols>
  <!-- This is the package guid. -->
  <GuidSymbol name="guidMenuTextPkg" value="{b1253bc6-d266-402b-89e7-5e3d3b22c746}" />

  <!-- This is the guid used to group the menu commands together -->
  <GuidSymbol name="guidMenuTextCmdSet" value="{a633d4e4-6c65-4436-a138-1abeba7c9a69}">

    <IDSymbol name="MyMenuGroup" value="0x1020" />
    <IDSymbol name="cmdidMyCommand" value="0x0100" />
  </GuidSymbol>

  <GuidSymbol name="guidImages" value="{53323d9a-972d-4671-bb5b-9e418480922f}" >
    <IDSymbol name="bmpPic1" value="1" />
    <IDSymbol name="bmpPic2" value="2" />
    <IDSymbol name="bmpPicSearch" value="3" />
    <IDSymbol name="bmpPicX" value="4" />
    <IDSymbol name="bmpPicArrows" value="5" />
  </GuidSymbol>
</Symbols>

L'elemento di primo livello della sezione di Symbols è Elemento GuidSymbol. nomi di mapping degli elementi diGuidSymbol ai GUID utilizzati dall'IDE per identificare i pacchetti e i relativi elementi.

Nota

I GUID vengono generati automaticamente dal modello del pacchetto di Visual Studio.È inoltre possibile creare un GUID univoco facendo clic su Crea GUID scegliere dal menu di strumenti .

Il primo elemento di GuidSymbol , “pacchetto il GUID [PackageName]„, rappresenta il GUID del pacchetto stesso. Si tratta del GUID utilizzato da Visual Studio per caricare il pacchetto. In genere, non contiene alcun elemento figlio.

Per convenzione, i menu e i controlli sono raggruppati in un elemento di GuidSymbol di secondo, “guid] [PackageName CmdSet„ e le bitmap si trovano in un elemento di GuidSymbol di terzo, “guidImages„. Non è necessario utilizzare la convenzione, ma ogni menu, gruppo, comandi e bitmap devono essere figlio di un elemento di GuidSymbol .

Nel secondo elemento di GuidSymbol , che rappresenta il set di comandi del pacchetto, sono diversi elementi di IDSymbol . Ciascuno Elemento IDSymbol esegue il mapping di un nome a un valore numerico che può rappresentare un menu, gruppo, o ordinare che fanno parte del set di comando. Gli elementi di IDSymbol nel terzo elemento di GuidSymbol rappresentano le bitmap che possono essere utilizzate come icone per i controlli. Poiché le coppie di GUID/ID devono essere univoche in un'applicazione, non sono presenti due figli dello stesso elemento di GuidSymbol possono avere lo stesso valore.

Quando un menu, un gruppo, o un comando presenta un GUID e un ID, può essere aggiunto all'IDE. Ogni elemento dell'interfaccia utente deve disporre delle seguenti operazioni:

  • Un attributo di guid che corrisponde al nome dell'elemento di GuidSymbol che l'elemento dell'interfaccia utente è definito in.

  • Un attributo di id che corrisponde al nome dell'elemento associato di IDSymbol .

    Insieme, guid e gli attributi di id costituiscono la firma dell'elemento dell'interfaccia utente.

  • Un attributo di priority che determina la posizione dell'elemento dell'interfaccia utente nel menu o un gruppo padre.

  • Elemento Parent Con guid e attributi di id che specificano la firma di menu o del gruppo padre.

Ogni menu è definito come Elemento Menu elemento nella sezione di Menus . I menu devono avere guid, ide attributi di priority e un elemento di Parent nonché i seguenti attributi ed elementi figlio aggiuntivi:

  • Un attributo di type che specifica se il menu verrà visualizzato nell'IDE come tipo di menu o la barra degli strumenti.

  • Elemento Strings Contenente un oggetto, Elemento ButtonTextche specifica il titolo del menu nell'IDE e, Elemento CommandNameche specifica il nome utilizzato nella finestra di commando per accedere al menu.

  • flag facoltativi. Un oggetto può Elemento Command Flag apparire in una definizione del menu per modificare l'aspetto o il comportamento dell'IDE.

Ogni elemento di Menu necessario disporre di un gruppo come relativo padre, a meno che non sia un elemento ancorabile come una barra degli strumenti. Un menu ancorabile è il relativo padre. Per ulteriori informazioni sui menu e i valori per typeattributo, Elemento Menu vedere la documentazione.

Nell'esempio seguente viene illustrato un menu della barra dei menu di Visual Studio, accanto al menu di strumenti .

<Menu guid="guidTopLevelMenuCmdSet"
id="TopLevelMenu" priority="0x700" type="Menu">
  <Parent guid="guidSHLMainMenu"
          id="IDG_VS_MM_TOOLSADDINS" />
  <Strings>
    <ButtonText>TestMenu</ButtonText>
    <CommandName>TestMenu</CommandName>
  </Strings>
</Menu>

Groups

Un gruppo è un elemento definito nella sezione di Groups del file di .vsct. I gruppi sono solo contenitori. Non vengono visualizzati nell'IDE ad eccezione della linea di divisione in un menu. Di conseguenza, Elemento Group viene definito solo da relativi firma, priorità e padre.

un gruppo può avere un menu, un altro gruppo, o stesso come padre. Tuttavia, questo elemento è in genere un menu o una barra degli strumenti. Il menu l'esempio precedente è un elemento figlio del gruppo di IDG_VS_MM_TOOLSADDINS e il gruppo è un elemento figlio della barra dei menu di Visual Studio. Il gruppo nell'esempio seguente è un elemento figlio del menu l'esempio precedente.

 <Group guid="guidTopLevelMenuCmdSet" id="MyMenuGroup"
priority="0x0600">
   <Parent guid="guidTopLevelMenuCmdSet" id="TopLevelMenu"/>
 </Group>

Poiché fa parte di un menu, questo gruppo in genere contiene i controlli. Tuttavia, potrebbe contenere anche altri menu. Questo è il sottomenu sono definiti, come illustrato nell'esempio seguente.

<Menu guid="guidTopLevelMenuCmdSet" id="SubMenu"
priority="0x0100" type="Menu">
  <Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup"/>
  <Strings>
    <ButtonText>Sub Menu</ButtonText>
    <CommandName>Sub Menu</CommandName>
  </Strings>
</Menu>

Comandi

Un comando fornito all'IDE viene definito come Elemento Button un oggetto o. Elemento Combo Per essere visualizzate in un menu o una barra degli strumenti, il comando deve disporre di un gruppo come relativo padre.

Pulsanti

I pulsanti sono definiti nella sezione di Buttons . Qualsiasi voce di menu, il pulsante, o un altro elemento che un utente fa clic su per eseguire un solo comando viene considerata come un pulsante. Alcuni tipi del pulsante possono includere anche la funzionalità dell'elenco. I pulsanti dispongono dello stesso obbligatorio e attributi facoltativi che i menu dispongono di e possono presentare Elemento Icon anche che specifica il GUID e l'ID della bitmap che rappresenta il pulsante nell'IDE. Per ulteriori informazioni sui pulsanti e sui relativi attributi, Elemento Buttons vedere la documentazione.

Il pulsante nell'esempio seguente è un elemento figlio del gruppo l'esempio precedente e apparirebbe nell'IDE come voce del menu padre di tale gruppo.

<Button guid="guidTopLevelMenuCmdSet" id="cmdidTestCommand" priority="0x0100" type="Button">
  <Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" />
  <Icon guid="guidImages" id="bmpPic1" />
  <Strings>
    <CommandName>cmdidTestCommand</CommandName>
    <ButtonText>Test Command</ButtonText>
  </Strings>
</Button>

Combos

Combos è definito nella sezione di Combos . Ogni elemento di Combo rappresenta un elenco a discesa nell'IDE. La casella di riepilogo può essere modificati da utenti, a seconda del valore dell'attributo di type di combinato. Combos presenta gli stessi elementi e comportamento dei pulsanti e può inoltre disporre dei seguenti attributi aggiuntivi:

  • un attributo di defaultWidth che specifica la larghezza in pixel.

  • Un attributo di idCommandList che specifica un elenco che contiene gli elementi visualizzati nella casella di riepilogo. L'elenco di comando deve essere dichiarato nello stesso nodo di GuidSymbol che contiene il combinato.

Nell'esempio seguente viene definito un elemento combinato.

<Combos>
  <Combo guid="guidFirstToolWinCmdSet"
         id="cmdidWindowsMediaFilename"
         priority="0x0100" type="DynamicCombo"
         idCommandList="cmdidWindowsMediaFilenameGetList"
         defaultWidth="130">
    <Parent guid="guidFirstToolWinCmdSet"
            id="ToolbarGroupID" />
    <CommandFlag>IconAndText</CommandFlag>
    <CommandFlag>CommandWellOnly</CommandFlag>
    <CommandFlag>StretchHorizontally</CommandFlag>
    <Strings>
      <CommandName>Filename</CommandName>
      <ButtonText>Enter a Filename</ButtonText>
    </Strings>
  </Combo>
</Combos>

bitmap

I controlli visualizzati insieme a un'icona devono includere un elemento di Icon che fa riferimento a una bitmap utilizzando il GUID e ID. Ogni bitmap viene definita come Elemento Bitmap elemento nella sezione di Bitmaps . Gli unici attributi obbligatori per una definizione di Bitmap sono guid e href, che indica il file di origine. Se il file di origine è una striscia delle risorse, un attributo di usedList è anche necessario, elencare le immagini disponibili in linea. Per ulteriori informazioni, vedere la documentazione dello spazio dei nomi Elemento Bitmap.

Elemento padre

Le regole seguenti determinano come un elemento può chiamare un altro elemento come relativo padre.

Elemento

Definito in questa sezione della Tabella dei comandi

Può essere contenuto (ad esempio padre, o dalla posizione nella sezione di CommandPlacements , o in entrambe)

Può contenere (definito padre)

Gruppo

Elemento Groups, l'ide, altro package VS.

un menu, un gruppo, l'elemento stesso

Menu, gruppi e controlli

Menu

Elemento Menu, l'ide, altro package VS.

1 ai gruppi di n

0 ai gruppi di n

Barra degli strumenti

Elemento Menu, l'ide, altro package VS.

l'elemento stesso

0 ai gruppi di n

Voce di menu

Elemento Buttons, l'ide, altro package VS.

1 ai gruppi di n , l'elemento stesso

-0 ai gruppi di n

Button

Elemento Buttons, l'ide, altro package VS.

1 ai gruppi di n , l'elemento stesso

combinato

Elemento Combos, l'ide, altro package VS.

1 ai gruppi di n , l'elemento stesso

Un menu, un gruppo, o un comando possono essere utilizzati in più posizioni nell'IDE. Affinché un elemento venga visualizzato in più posizioni, deve essere aggiunto alla sezione di CommandPlacements come. Elemento CommandPlacement Il menu, gruppo, o comando possono essere aggiunte come posizione del comando. Tuttavia, le barre degli strumenti non possono essere inserite in questo modo perché non possono essere visualizzati in posizioni sensibili al contesto più.

Le posizioni di comando sono guid, ide attributi di priority . Il GUID e l'ID devono corrispondere a quelle dell'elemento che si trova. L'attributo di priority definisce la posizione degli elementi rispetto ad altri elementi. Quando l'ide unisce due o più elementi che dispongono della stessa priorità, i percorsi sono definite perché l'ide non garantisce che le risorse del pacchetto vengono lette nello stesso ordine ogni volta che il pacchetto viene compilato.

Se un menu o un gruppo viene visualizzato in più posizioni, tutti i figli di tale menu o gruppo verranno visualizzati in ciascuna istanza.

Visibilità e contesto di comando

Quando Vspackage più è installato, una profusione dei menu, le voci di menu e le barre degli strumenti può ingombrare dell'IDE. Per evitare questo problema, è possibile controllare la visibilità di singoli elementi di interfaccia utente utilizzando i vincoli di visibilità e i flag del comando.

vincoli di visibilità

Un vincolo di visibilità è impostato come Elemento VisibilityItem elemento nella sezione di VisibilityConstraints . Un vincolo di visibilità definisce i contesti specifici dell'interfaccia utente in cui l'elemento di destinazione è visibile. Un menu o comandi che è incluso in questa sezione è visibile solo quando uno dei contesti definiti è attivo. Se un menu o un comando non viene fatto riferimento in questa sezione, è sempre visibile per impostazione predefinita. In questa sezione non si applica ai gruppi.

gli elementi diVisibilityItem devono essere presenti tre attributi, come segue: guid e id dell'elemento dell'interfaccia utente di destinazione e context. L'attributo di context specifica quando l'elemento di destinazione sarà visibile e accetta qualsiasi contesto valido dell'interfaccia utente come valore. Le costanti di contesto dell'interfaccia utente per Visual Studio sono membri della classe di VSConstants . Ogni elemento di VisibilityItem può avere solo un valore di contesto. Per applicare un secondo contesto, creare un elemento di VisibilityItem di secondi che indica lo stesso elemento, come illustrato nell'esempio seguente.

<VisibilityConstraints>
  <VisibilityItem guid="guidSolutionToolbarCmdSet"
        id="cmdidTestCmd"
        context="UICONTEXT_SolutionHasSingleProject" />
  <VisibilityItem guid="guidSolutionToolbarCmdSet"
        id="cmdidTestCmd"
        context="UICONTEXT_SolutionHasMultipleProjects" />
</VisibilityConstraints>

Flag di comando

I seguenti flag di comando possono influire sulla visibilità dei menu e i controlli che si applicano a.

  • AlwaysCreate
    Il menu viene creato anche in assenza di gruppi o pulsanti.

    valido per: Menu

  • CommandWellOnly
    Applicare questo flag se il comando non viene visualizzato nel menu di primo livello e si desidera renderlo disponibile per un'ulteriore personalizzazione della shell, ad esempio, associazione a una chiave. Dopo che il package VS è installato, un utente può personalizzare questi controlli aprendo la finestra di dialogo di opzioni e modificando la posizione del comando nella categoria di Ambiente della tastiera . Non influisce sulla posizione nei menu di scelta rapida, barre degli strumenti, sui controller il menu, o sui sottomenu.

    valido per: Button, Combo

  • DefaultDisabled
    Per impostazione predefinita, il comando è disabilitato se il package VS che implementa il comando non viene caricato o il metodo di QueryStatus non è stato chiamato.

    valido per: Button, Combo

  • DefaultInvisible
    Per impostazione predefinita, il comando è invisibile se il package VS che implementa il comando non viene caricato o il metodo di QueryStatus non è stato chiamato.

    Deve essere combinato con il flag di DynamicVisibility .

    valido per: Button, Combo, Menu

  • DynamicVisibility
    La visibilità del comando può essere modificata tramite il metodo di QueryStatus o un contesto GUID incluso nella sezione di VisibilityConstraints .

    Si applica ai controlli visualizzati nei menu, non barre degli strumenti. Gli elementi di livello superiore della barra degli strumenti può essere disabilitati, ma non possono essere nascosti, quando il flag di OLECMDF_INVISIBLE viene restituito dal metodo di QueryStatus.

    In un menu, questo flag indica inoltre che deve automaticamente essere oscurato quando i membri nascosti. Questo flag in genere distribuito a sottomenu poiché i menu di primo livello già dispongono di questo comportamento.

    Deve essere combinato con il flag di DefaultInvisible .

    valido per: Button, Combo, Menu

  • NoShowOnMenuController
    Se un comando che ha questo flag viene posizionato su un controller di menu, il comando non viene visualizzato nell'elenco a discesa.

    valido per: Button

Per ulteriori informazioni sui flag di comando, Elemento Command Flag vedere la documentazione.

Suggerimenti generali

Il comando deve passare la seguente sequenza di test prima di poter visualizzare e abilitata:

  • Il comando viene inserito correttamente.

  • Il flag di DefaultInvisible non è impostata.

  • Il menu o la barra degli strumenti padre è visibile.

  • Il comando non è invisibile a causa di una voce di contesto Elementi VisibilityConstraints nella sezione.

  • Il codice di package VS che implementa l'interfaccia di IOleCommandTarget visualizzare ed effettuare il comando. Nessun codice dell'interfaccia lo ha intercettato e ha intrapreso su.

  • Quando un utente sceglie il comando, diventa conforme alla routine che viene delimitata in Algoritmo di routing dei comandi.

Chiamare i controlli predefiniti

Elemento UsedCommands Consente a Vspackage per accedere ai controlli inclusi in un altro package VS o dall'IDE. A tale scopo, creare Elemento UsedCommand un oggetto con il GUID e l'ID di comando utilizzare. Ciò garantisce che il comando venga caricato da Visual Studio, anche se non fa parte della configurazione corrente di Visual Studio. Per ulteriori informazioni, vedere Elemento UsedCommand.

Aspetto degli elementi dell'interfaccia

Considerazioni per selezionare e il posizionamento degli elementi di comando sono le seguenti:

  • Visual Studio offre numerosi elementi di interfaccia utente visualizzati in modo diverso a seconda della posizione.

  • Un elemento dell'interfaccia utente definita utilizzando il flag di DefaultInvisible non viene visualizzato nell'IDE a meno che visualizzate dalla relativa implementazione di un VSPackage del metodo di QueryStatus , o associato a un contesto specifico dell'interfaccia utente nella sezione di VisibilityConstraints .

  • Persino un comando correttamente posizionato non può essere visualizzato. Ciò è dovuto al fatto che nasconde IDE automaticamente o visualizzare alcuni controlli, come le interfacce che il package VS o non ha) ha implementato. Ad esempio, l'implementazione di un package VS di alcune interfacce di compilazione determina le voci di menu relative automaticamente a essere visualizzata.

  • Applicare il flag di CommandWellOnly nella definizione dell'elemento dell'interfaccia utente indica che il comando è possibile aggiungere solo tramite personalizzazione.

  • I controlli possono essere disponibili solo in determinati contesti dell'interfaccia utente, ad esempio, solo quando una finestra di dialogo viene visualizzata quando l'ide è in visualizzazione progettazione.

  • Affinché determinati elementi di interfaccia utente a essere visualizzata nell'IDE di, è necessario implementare una o più interfacce o scrivere del codice.

Vedere anche

Concetti

Making Commands Available

Altre risorse

Attività comuni con i controlli, i menu e le barre degli strumenti

Command Table Configuration (.ctc) Files

Command Table Format Reference

Command Routing in VSPackages