procedura dettagliata: Implementare un menu di scelta rapida in una finestra degli strumenti
In questa procedura dettagliata viene inserito un menu di scelta rapida in una finestra degli strumenti. Un menu di scelta rapida rappresenta un menu visualizzato quando un utente fa clic con il pulsante destro del mouse su un (GUI) elemento dell'interfaccia utente grafica ad esempio un pulsante, una casella di testo, o uno sfondo della finestra. I controlli in un menu di scelta rapida si comportano allo stesso modo dei controlli in altri menu o barre degli strumenti. Per supportare un menu di scelta rapida, specificarlo nel file della Tabella dei comandi XML (.vsct) e visualizzato in risposta a fare clic con il pulsante destro del mouse.
Una finestra degli strumenti è costituito da un (WPF) controllo utente Windows Presentation Foundation in una classe personalizzata della finestra degli strumenti che eredita da ToolWindowPane.
In questa procedura dettagliata viene illustrato come creare un menu di scelta rapida come menu di Visual Studio, dichiarando le voci di menu nel file di .vsct quindi utilizzando il pacchetto gestito Framework implementarle nella classe che definisce la finestra degli strumenti. Questo approccio consente l'accesso ai comandi di Visual Studio, elementi di interfaccia utente e il modello a oggetti di automazione.
In alternativa, se il menu di scelta rapida non utilizzerà la funzionalità di Visual Studio, è possibile utilizzare la proprietà di ContextMenu di un elemento xaml nel controllo utente. Per ulteriori informazioni, vedere ContextMenu.
Prerequisiti
Per completare questa procedura dettagliata, è necessario installare Visual Studio 2010 SDK.
Nota
per ulteriori informazioni su Visual Studio SDK, vedere Cenni preliminari sull'estensione di Visual Studio.Per ulteriori informazioni su come scaricare Visual Studio SDK, vedere Centro per sviluppatori di estensibilità di Visual Studio il sito Web MSDN.
Posizioni del modello di progetto del pacchetto Visual Studio
Il modello di progetto del pacchetto Visual Studio è disponibile in tre percorsi nella finestra di dialogo di nuovo progetto :
In Estensibilità di Visual Basic. La lingua predefinita del progetto di Visual Basic.
In Estensibilità di C#. La lingua predefinita del progetto è c#.
In L'altra estensibilità dei tipi di progetto. La lingua predefinita del progetto è C++.
Creare il pacchetto del menu di scelta rapida della finestra degli strumenti
Per creare il MyTWGradientPackage VSPackage
creare un pacchetto TWShortcutMenudenominato progetto di Visual Studio.
Nella procedura guidata del pacchetto, impostare il linguaggio di Visual Basic o c#.
Selezionare l'opzione per creare una finestra degli strumenti.
Denominare la finestra di modifica del colore della finestra degli strumenti e impostarne l'id di comando a cmdidColorChange.
specificare il menu di scelta rapida
Un menu di scelta rapida come quello illustrato in questa procedura dettagliata consente all'utente di scegliere da un elenco dei colori utilizzati per riempire lo sfondo della finestra degli strumenti.
Per creare il menu di scelta rapida
aprire MyTWGradientPackage.vsct.
Nell'elemento di simboli , nell'elemento di GuidSymbol denominato “guidTWShortcutMenuCmdSet„, dichiarare il menu di scelta rapida, il gruppo di menu di scelta rapida e le opzioni di menu, come illustrato di seguito.
<IDSymbol name="ColorMenu" value="0x1000"/> <IDSymbol name="ColorGroup" value="0x1100"/> <IDSymbol name="cmdidRed" value="0x102"/> <IDSymbol name="cmdidYellow" value="0x103"/> <IDSymbol name="cmdidBlue" value="0x104"/>
Immediatamente prima dell'elemento di gruppi , creare un elemento di menu quindi definire il menu di scelta rapida.
<Menus> <Menu guid="guidTWShortcutMenuCmdSet" id="ColorMenu" type="Context"> <Strings> <ButtonText>Color change</ButtonText> <CommandName>ColorChange</CommandName> </Strings> </Menu> </Menus>
Un menu di scelta rapida non include un elemento padre poiché non fa parte di un menu o una barra degli strumenti.
Nell'elemento di Groups , definire l'elemento di gruppo contenente gli elementi del menu di scelta rapida e associare il gruppo al menu di scelta rapida.
<Group guid="guidTWShortcutMenuCmdSet" id="ColorGroup"> <Parent guid="guidTWShortcutMenuCmdSet" id="ColorMenu"/> </Group>
Nell'elemento di pulsanti , definire i singoli controlli da includere nel menu di scelta rapida.
<Button guid="guidTWShortcutMenuCmdSet" id="cmdidRed" priority="1" type="Button"> <Parent guid="guidTWShortcutMenuCmdSet" id="ColorGroup" /> <Strings> <ButtonText>Red</ButtonText> </Strings> </Button> <Button guid="guidTWShortcutMenuCmdSet" id="cmdidYellow" priority="3" type="Button"> <Parent guid="guidTWShortcutMenuCmdSet" id="ColorGroup" /> <Strings> <ButtonText>Yellow</ButtonText> </Strings> </Button> <Button guid="guidTWShortcutMenuCmdSet" id="cmdidBlue" priority="5" type="Button"> <Parent guid="guidTWShortcutMenuCmdSet" id="ColorGroup" /> <Strings> <ButtonText>Blue</ButtonText> </Strings> </Button>
aprire PkgCmdID.vb o PkgCmdID.cs.
Aggiungere le definizioni del menu di scelta rapida e le voci di menu.
public const int ColorMenu = 0x1000; public const int cmdidRed = 0x102; public const int cmdidYellow = 0x103; public const int cmdidBlue = 0x104;
Questi sono gli stessi ID controlli definiti nella sezione di Symbols del file di TWShortcutMenu.vsct. Il gruppo di contesto non è incluso in questo caso perché è obbligatorio solo nel file di .vsct.
Salvare la soluzione e compilarla.
implementare il menu di scelta rapida
In questa sezione viene implementato il menu di scelta rapida e i relativi controlli.
Per implementare il menu di scelta rapida
aprire MyToolWindow.vb o MyToolWindow.cs.
La classe di MyToolWindow ha accesso ai servizi del comando di menu, ma il controllo utente che ospita contrario. I tre passaggi riportati di seguito viene illustrato come creare un'istanza del servizio del comando di menu disponibile nella finestra degli strumenti al controllo utente.
Aggiungere lo spazio dei nomi System.ComponentModel.Design.
using System.ComponentModel.Design;
Aggiungere una variabile per utilizzare l'istanza del servizio del comando di menu.
internal OleMenuCommandService mcs;
Alla fine del costruttore, aggiungere una chiamata al servizio del comando di menu e modificare la chiamata a base.Content, come illustrato di seguito.
mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService; base.Content = new MyControl(this);
Chiamare il servizio del comando di menu nel costruttore garantisce che sia nella memoria ogni volta che la finestra degli strumenti è aperta. Passando un'istanza della finestra degli strumenti come parametro al costruttore del controllo consente al controllo per eseguire chiamate ai membri della classe della finestra degli strumenti.
aprire MyControl.xaml.
Il file rappresenta il controllo utente visualizzate nella finestra degli strumenti.
Aggiungere un evento di MouseRightButtonDown all'elemento di UserControl di primo livello.
MouseRightButtonDown="MyToolWindow_MouseRightButtonDown"
Fare clic con il pulsante destro del mouse sulla dichiarazione di evento appena aggiunta e fare clic su Passare al gestore eventi.
Verrà aperta MyControl.xaml.vb o MyControl.xaml.cs e crea uno stub per il gestore eventi.
All'inizio di MyControl, aggiungere Microsoft.VisualStudio.Shell e gli spazi dei nomi di System.ComponentModel.Design .
using Microsoft.VisualStudio.Shell; using System.ComponentModel.Design;
Aggiungere un campo per utilizzare un riferimento alla finestra degli strumenti padre e modificare il costruttore come segue.
MyToolWindow _parent; public MyControl(MyToolWindow parent) { InitializeComponent(); _parent = parent; OleMenuCommandService mcs = this._parent.mcs; if (null != mcs) { // Create an alias for the command set guid. Guid g = GuidList.guidTWShortcutMenuCmdSet; // Create the command IDs. var red = new CommandID(g, PkgCmdIDList.cmdidRed); var yellow = new CommandID(g, PkgCmdIDList.cmdidYellow); var blue = new CommandID(g, PkgCmdIDList.cmdidBlue); // Add a command for each command ID. mcs.AddCommand(new MenuCommand(ChangeColor, red)); mcs.AddCommand(new MenuCommand(ChangeColor, yellow)); mcs.AddCommand(new MenuCommand(ChangeColor, blue)); } }
Il costruttore ora utilizza l'istanza padre della finestra degli strumenti come parametro e memorizzata nel campo di _parent . Quindi creare oggetti di CommandID dal comando GUID stabilito e i valori di PkgCmdList che rappresentano i comandi di menu che è definito nel file di .vsct. Infine, aggiungere comandi al servizio del comando di menu e assegna i gestori eventi.
implementare l'evento di MyToolWindowMouseRightButtonDown come segue.
private void MyToolWindow_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { OleMenuCommandService mcs = this._parent.mcs; if (null != mcs) { CommandID menuID = new CommandID( GuidList.guidTWShortcutMenuCmdSet, PkgCmdIDList.ColorMenu); Point p = this.PointToScreen(e.GetPosition(this)); mcs.ShowContextMenu(menuID, (int)p.X, (int)p.Y); } }
Verrà creato un oggetto di CommandID per il menu di scelta rapida, identificare la posizione del clic del mouse e apre il menu di scelta rapida in tale percorso tramite il metodo di ShowContextMenu .
Implementare l'evento, che viene definito nel costruttore, per un utente fa clic su una voce di menu.
private void ChangeColor(object sender, EventArgs e ) { var mc = sender as MenuCommand; switch (mc.CommandID.ID) { case PkgCmdIDList.cmdidRed: MyToolWindow.Background = Brushes.Red; break; case PkgCmdIDList.cmdidYellow: MyToolWindow.Background = Brushes.Yellow; break; case PkgCmdIDList.cmdidBlue: MyToolWindow.Background = Brushes.Blue; break; } }
In questo caso, un solo metodo gestisce gli eventi per tutte le voci di menu identificando CommandID e impostare il colore di sfondo di conseguenza. Se le voci di menu dispongono di contenuto i controlli indipendenti, si ottengono creato un gestore eventi separato per ogni comando.
Il test delle funzionalità della finestra degli strumenti
In questa sezione viene illustrato come illustrare le funzionalità aggiunte in questa procedura dettagliata.
Per verificare le funzionalità della finestra degli strumenti
premere F5 per aprire un'istanza sperimentale di Visual Studio.
Nell'istanza sperimentale, scegliere dal menu di visualizzazione , fare clic su altre finestre quindi fare clic su Finestra di modifica del colore. Questa operazione deve essere visualizzata la finestra degli strumenti.
Fare clic con il pulsante destro del mouse sullo sfondo della finestra degli strumenti, dal pulsante. Un menu di scelta rapida che contiene un elenco di colori deve essere visualizzato.
Scegliere un colore dal menu di scelta rapida. Il menu di scelta rapida necessario nascosto e il colore di sfondo della finestra degli strumenti deve essere modificato al colore selezionato.
Passaggi successivi
Se si modifica il menu di scelta rapida modificando il file di .vsct, è necessario ricompilare il progetto MyTWGradientPackageUI. In questo modo il file di .vsct i dati e la DLL satellite da ripetere il collegamento con le modifiche apportate al file di .vsct.
Vedere anche
Altre risorse
Procedure dettagliate per i controlli, i menu e le barre degli strumenti