Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Een VSPackage kan elementen van de gebruikersinterface (UI) toevoegen, bijvoorbeeld menu's, werkbalken en toolvensters, aan Visual Studio via het VSCT-bestand .
U vindt ontwerprichtlijnen voor UI-elementen in de richtlijnen voor gebruikerservaring van Visual Studio.
De visual Studio-opdrachttabelarchitectuur
Zoals vermeld, ondersteunt de opdrachttabelarchitectuur de voorgaande architectuurprincipes. De tenets achter de abstracties, gegevensstructuren en hulpprogramma's van de opdrachttabelarchitectuur zijn als volgt:
Er zijn drie basistypen items: menu's, opdrachten en groepen. Menu's kunnen in de gebruikersinterface worden weergegeven als menu's, submenu's, werkbalken of werkvensters. Opdrachten zijn procedures die de gebruiker kan uitvoeren in de IDE en ze kunnen worden weergegeven als menu-items, knoppen, keuzelijsten of andere besturingselementen. Groepen zijn containers voor zowel menu's als opdrachten.
Elk item wordt opgegeven door een definitie die het item beschrijft, de prioriteit ten opzichte van andere items en de vlaggen die het gedrag ervan wijzigen.
Elk item heeft een toewijzing die het ouderitem aangeeft. Een item kan meerdere bovenouders hebben, zodat het kan worden weergegeven op meerdere locaties in de gebruikersinterface.
Elke opdracht moet een groep als bovenliggende groep hebben, zelfs als dit het enige onderdeel in die groep is. Elk standaardmenu moet ook een bovenliggende groep hebben. Werkbalken en gereedschapsvensters fungeren als hun eigen ouders. Een groep kan als bovenliggend element de hoofdmenubalk van Visual Studio hebben, of een menu, werkbalk of toolvenster.
Hoe items worden gedefinieerd
Een VSCT-bestand is opgemaakt in XML. Hiermee worden de UI-elementen voor een pakket gedefinieerd en wordt bepaald waar deze elementen worden weergegeven in de IDE. Aan elk menu, elke groep of opdracht in het pakket wordt eerst een GUID en id in de Symbols sectie toegewezen. In de rest van het .vsct-bestand wordt elk menu, elke opdracht en groep geïdentificeerd door de GUID- en ID-combinatie. In het volgende voorbeeld ziet u een typische Symbols sectie die wordt gegenereerd door de Visual Studio-pakketsjabloon wanneer een menuopdracht is geselecteerd in de sjabloon.
<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>
Het element op het hoogste niveau van de Symbols sectie is het guidSymbol-element.
GuidSymbol elementen wijzen namen toe aan GUID's die door de IDE worden gebruikt om pakketten en de bijbehorende onderdelen te identificeren.
Opmerking
GUID's worden automatisch gegenereerd door de Visual Studio-pakketsjabloon. U kunt ook een unieke GUID maken door te klikken op Unieke GUID maken in het menu Extra.
Het eerste GuidSymbol element, guid<PackageName>Pkgis de GUID van het pakket zelf. Dit is de GUID die door Visual Studio wordt gebruikt om het pakket te laden. Normaal gesproken bevat het geen onderliggende elementen.
Standaard worden menu's en opdrachten gegroepeerd onder een tweede GuidSymbol element, guid<PackageName>CmdSeten bitmaps bevinden zich onder een derde GuidSymbol element. guidImages U hoeft deze conventie niet te volgen, maar elk menu, elke groep, opdracht en bitmap moet een onderliggend GuidSymbol element zijn.
In het tweede GuidSymbol element, dat de pakketopdrachtset vertegenwoordigt, zijn verschillende IDSymbol elementen. Elk ELEMENT IDSymbol wijst een naam toe aan een numerieke waarde en kan een menu, groep of opdracht vertegenwoordigen die deel uitmaakt van de opdrachtenset. De IDSymbol elementen in het derde GuidSymbol element vertegenwoordigen bitmaps die kunnen worden gebruikt als pictogrammen voor opdrachten. Omdat GUID-/id-paren uniek moeten zijn in een toepassing, hebben geen twee onderliggende elementen van hetzelfde GuidSymbol element mogelijk dezelfde waarde.
Menu's, groepen en opdrachten
Wanneer een menu, groep of opdracht een GUID en id heeft, kan deze worden toegevoegd aan de IDE. Elk UI-element moet de volgende zaken hebben:
Een
guidkenmerk dat overeenkomt met de naam van hetGuidSymbolelement waaronder het UI-element is gedefinieerd.Een
idkenmerk dat overeenkomt met de naam van het gekoppeldeIDSymbolelement.
Samen vormen de guid en id kenmerken de handtekening van het ui-element.
Een
prioritykenmerk dat de plaatsing van het UI-element in het bovenliggende menu of de bovenliggende groep bepaalt.Een bovenliggend element dat de
guidenidattributen heeft, die de handtekening van het bovenliggende menu of de bovenliggende groep specificeren.
Menu's
Elk menu wordt gedefinieerd als een menu-element in de Menus sectie. Menu's moeten de attributen guid, id, priority en een Parent element hebben, alsook de volgende extra attributen en onderliggende elementen:
Een
typekenmerk dat aangeeft of het menu moet worden weergegeven in de IDE als een soort menu of als werkbalk.Een tekenreekselement dat een ButtonText-element bevat, waarmee de titel van het menu in de IDE wordt opgegeven en een CommandName-element, waarmee de naam wordt opgegeven die wordt gebruikt in het opdrachtvenster voor toegang tot het menu.
Optionele vlaggen. Een CommandFlag-element kan worden weergegeven in een menudefinitie om het uiterlijk of gedrag ervan in de IDE te wijzigen.
Elk Menu-element moet als bovenliggend element een groep hebben, tenzij het een verankerbaar element is, zoals een werkbalk. Een koppelbaar menu is zijn eigen ouder. Zie type voor menu-elementen voor meer informatie over menu's en waarden voor het kenmerk.
In het volgende voorbeeld ziet u een menu dat wordt weergegeven op de menubalk van Visual Studio, naast het menu Extra .
<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
Een groep is een item dat is gedefinieerd in de Groups sectie van het VSCT-bestand . Groepen zijn slechts containers. Ze worden niet weergegeven in de IDE, behalve als een scheidingslijn in een menu. Daarom wordt een groepselement alleen gedefinieerd door de handtekening, prioriteit en het bovenliggende element.
Een groep kan een menu, een andere groep of zichzelf als bovenliggend item hebben. Het bovenliggende item is echter meestal een menu of werkbalk. Het menu in het eerdere voorbeeld is een onderliggend element van de IDG_VS_MM_TOOLSADDINS groep en die groep is een onderliggend element van de menubalk van Visual Studio. De groep in het volgende voorbeeld is een onderliggend element van het menu in het eerdere voorbeeld.
<Group guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidTopLevelMenuCmdSet" id="TopLevelMenu"/>
</Group>
Omdat deze groep deel uitmaakt van een menu, bevat deze groep meestal opdrachten. Het kan echter ook andere menu's bevatten. Dit is hoe submenu's worden gedefinieerd, zoals wordt weergegeven in het volgende voorbeeld.
<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>
Commands
Een opdracht die aan de IDE wordt geleverd, wordt gedefinieerd als een knopelement of een combinatie-element. Om in een menu of werkbalk te verschijnen, moet de opdracht een groep als ouder hebben.
Buttons
Knoppen worden gedefinieerd in de Buttons sectie. Een menu-item, knop of ander element waarop een gebruiker klikt om één opdracht uit te voeren, wordt beschouwd als een knop. Sommige knoptypen kunnen ook lijstfunctionaliteit bevatten. Knoppen hebben dezelfde vereiste en optionele kenmerken die menu's hebben en kunnen ook een pictogramelement hebben waarmee de GUID en id van de bitmap worden opgegeven die de knop in de IDE vertegenwoordigt. Zie de documentatie voor knoppenelement voor meer informatie over knoppen en hun kenmerken.
De knop in het volgende voorbeeld is een onderliggend element van de groep in het eerdere voorbeeld en wordt in de IDE weergegeven als een menu-item in het bovenliggende menu van die groep.
<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>
Combinaties
Combinaties worden gedefinieerd in de Combos sectie. Elk Combo element vertegenwoordigt een vervolgkeuzelijst in de IDE. De keuzelijst kan wel of niet beschrijfbaar zijn door gebruikers, afhankelijk van de waarde van het type kenmerk van de combinatie. Combinaties hebben dezelfde elementen en hetzelfde gedrag als knoppen en kunnen ook de volgende extra kenmerken hebben:
Een
defaultWidthkenmerk dat pixelbreedte aangeeft.Een
idCommandListkenmerk waarmee een lijst wordt opgegeven die de items bevat die in de keuzelijst worden weergegeven. De opdrachtlijst moet worden gedeclareerd in hetzelfdeGuidSymbolknooppunt dat de combinatie bevat.
In het volgende voorbeeld wordt een combinatie-element gedefinieerd.
<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>
Bitmaps
Opdrachten die samen met een pictogram worden weergegeven, moeten een Icon element bevatten dat verwijst naar een bitmap met behulp van de GUID en id. Elke bitmap wordt gedefinieerd als bitmapelement in de Bitmaps sectie. De enige vereiste kenmerken voor een Bitmap definitie zijn guid en href, die naar het bronbestand verwijst. Als het bronbestand een resourcestrip is, is ook een usedList-kenmerk vereist om de afbeeldingen in de strip beschikbaar te maken. Zie de documentatie voor bitmapelementen voor meer informatie.
Ouderschap
De volgende regels bepalen hoe een item een ander item kan aanroepen als bovenliggend item.
| Onderdeel | Gedefinieerd in deze sectie van de opdrachttabel | Kan zijn opgenomen (als ouderitem of door plaatsing ervan in de CommandPlacements sectie, of beide) |
Mag bevatten (ook wel een bovenliggend element genoemd) |
|---|---|---|---|
| Groep | Het element Groepen, de IDE, andere VSPackages | Een menu, een groep, het item zelf | Menu's, groepen en opdrachten |
| Menulijst | Menu-element, de IDE, andere VSPackages | 1 tot n groepen | 0 tot n groepen |
| Werkbalk | Menu-element, de IDE, andere VSPackages | Het item zelf | 0 tot n groepen |
| Menuoptie | Knoppenelement, de IDE, andere VSPackages | 1 tot n groepen, het item zelf | -0 tot n groepen |
| Knop | Knoppenelement, de IDE, andere VSPackages | 1 tot n groepen, het item zelf | |
| Combo | Combos-element, de IDE, andere VSPackages | 1 tot n groepen, het item zelf |
Menu, opdracht en groepsplaatsing
Een menu, groep of opdracht kan op meer dan één locatie in de IDE worden weergegeven. Als u een item op meerdere locaties wilt weergeven, moet het als CommandPlacements aan de sectie worden toegevoegd. Een menu, groep of opdracht kan worden toegevoegd als opdrachtplaatsing. Werkbalken kunnen echter niet op deze manier worden geplaatst omdat ze niet op meerdere contextgevoelige locaties kunnen worden weergegeven.
Opdrachtplaatsingen hebben guid, iden priority kenmerken. De GUID en id moeten overeenkomen met die van het item dat is positioneerd. Het priority kenmerk bepaalt de plaatsing van het item met betrekking tot andere items. Wanneer de IDE twee of meer items met dezelfde prioriteit samenvoegt, zijn hun plaatsingen niet gedefinieerd omdat de IDE niet garandeert dat pakketresources in dezelfde volgorde worden gelezen telkens wanneer het pakket wordt gebouwd.
Als een menu of groep op meerdere locaties wordt weergegeven, zullen alle kinderen van dat menu of die groep in elk voorbeeld worden weergegeven.
Zichtbaarheid en context van opdracht
Wanneer meerdere VSPackages zijn geïnstalleerd, kan een overvloed aan menu's, menu-items en werkbalken de IDE overladen. U kunt dit probleem voorkomen door de zichtbaarheid van afzonderlijke UI-elementen te beheren met behulp van zichtbaarheidsbeperkingen en opdrachtvlagmen.
Zichtbaarheidsbeperkingen
Een zichtbaarheidsbeperking wordt ingesteld als een VisibilityItem-element in de VisibilityConstraints sectie. Een zichtbaarheidsbeperking definieert specifieke UI-contexten waarin het doelitem zichtbaar is. Een menu of opdracht die in deze sectie is opgenomen, is alleen zichtbaar wanneer een van de gedefinieerde contexten actief is. Als in deze sectie niet naar een menu of opdracht wordt verwezen, is dit altijd standaard zichtbaar. Deze sectie is niet van toepassing op groepen.
VisibilityItem elementen moeten drie attributen hebben, namelijk de guid en id van het doel-UI-element, en context. Het context kenmerk geeft aan wanneer het doelitem zichtbaar is en gebruikt een geldige UI-context als waarde. De contextconstanten van de gebruikersinterface voor Visual Studio zijn lid van de VSConstants klasse. Elk VisibilityItem element kan slechts één contextwaarde aannemen. Als u een tweede context wilt toepassen, maakt u een tweede VisibilityItem element dat verwijst naar hetzelfde item, zoals wordt weergegeven in het volgende voorbeeld.
<VisibilityConstraints>
<VisibilityItem guid="guidSolutionToolbarCmdSet"
id="cmdidTestCmd"
context="UICONTEXT_SolutionHasSingleProject" />
<VisibilityItem guid="guidSolutionToolbarCmdSet"
id="cmdidTestCmd"
context="UICONTEXT_SolutionHasMultipleProjects" />
</VisibilityConstraints>
Opdrachtvlagmen
De volgende opdrachtvlagmen kunnen van invloed zijn op de zichtbaarheid van de menu's en opdrachten waarvoor ze van toepassing zijn.
AlwaysCreate Het menu wordt gemaakt, zelfs als het geen groepen of knoppen bevat.
Geldig voor: Menu
CommandWellOnly Pas deze vlag toe als de opdracht niet wordt weergegeven in het menu op het hoogste niveau en u deze beschikbaar wilt maken voor extra shellaanpassing, bijvoorbeeld door deze aan een sleutel te koppelen. Nadat de VSPackage is geïnstalleerd, kan een gebruiker deze opdrachten aanpassen door het dialoogvenster Opties te openen en vervolgens de plaatsing van de opdracht onder de categorie Toetsenbordomgeving te bewerken. Heeft geen invloed op de plaatsing van snelkoppelmenu's, werkbalken, menubedieningspanelen of submenu's.
Geldig voor: Button, Combo
DefaultDisabled De opdracht is standaard uitgeschakeld als de VSPackage waarmee de opdracht wordt geïmplementeerd, niet is geladen of als de QueryStatus-methode niet is aangeroepen.
Geldig voor: Button, Combo
DefaultInvisible De opdracht is standaard onzichtbaar als de VSPackage waarmee de opdracht wordt geïmplementeerd, niet is geladen of als de QueryStatus-methode niet is aangeroepen.
Moet worden gecombineerd met de DynamicVisibility vlag.
Geldig voor: Button, ComboMenu
DynamicVisibility De zichtbaarheid van de opdracht kan worden gewijzigd met behulp van de QueryStatus methode of een context-GUID die is opgenomen in de VisibilityConstraints sectie.
Van toepassing op opdrachten die worden weergegeven in menu's, niet op werkbalken. Werkbalkitems op het hoogste niveau kunnen worden uitgeschakeld, maar niet verborgen wanneer de OLECMDF_INVISIBLE vlag wordt geretourneerd vanuit de QueryStatus methode.
In een menu geeft deze vlag ook aan dat deze automatisch moet worden verborgen wanneer de onderdelen zijn verborgen. Deze vlag wordt doorgaans toegewezen aan submenu's omdat menu's op het hoogste niveau dit gedrag al hebben.
Moet worden gecombineerd met de DefaultInvisible vlag.
Geldig voor: Button, ComboMenu
NoShowOnMenuController Als een opdracht met deze vlag op een menucontroller is geplaatst, wordt de opdracht niet weergegeven in de vervolgkeuzelijst.
Geldig voor: Button
Zie de commandFlag-elementdocumentatie voor meer informatie over opdrachtvlag-vlaggen.
Algemene vereisten
Uw opdracht moet voldoen aan de volgende reeks tests voordat deze kan worden weergegeven en ingeschakeld:
De opdracht is correct gepositioneerd.
De
DefaultInvisiblevlag is niet ingesteld.Het bovenliggende menu of de werkbalk is zichtbaar.
De opdracht is niet onzichtbaar vanwege een contextvermelding in de sectie VisibilityConstraints-element .
VSPackage-code die de IOleCommandTarget interface implementeert, geeft uw opdracht weer en schakelt deze in. Geen interfacecode heeft het onderschept en er actie op ondernomen.
Wanneer een gebruiker op uw opdracht klikt, wordt deze onderworpen aan de procedure die wordt beschreven in het routeringsalgoritmen.
Vooraf gedefinieerde opdrachten aanroepen
Met het element UsedCommands kunnen VSPackages toegang krijgen tot opdrachten die worden geleverd door andere VSPackages of door de IDE. Hiervoor maakt u een UsedCommand-element met de GUID en id van de opdracht die u wilt gebruiken. Dit zorgt ervoor dat de opdracht wordt geladen door Visual Studio, zelfs als deze geen deel uitmaakt van de huidige Visual Studio-configuratie. Zie Het element UsedCommand voor meer informatie.
Uiterlijk van interface-element
Overwegingen voor het selecteren en positioneren van opdrachtelementen zijn als volgt:
Visual Studio biedt veel UI-elementen die verschillend worden weergegeven, afhankelijk van de plaatsing.
Een UI-element dat is gedefinieerd met behulp van de
DefaultInvisiblevlag, wordt niet weergegeven in de IDE, tenzij het wordt weergegeven door de VSPackage-implementatie van de QueryStatus methode of gekoppeld aan een bepaalde UI-context in deVisibilityConstraintssectie.Zelfs een succesvol geplaatste opdracht wordt mogelijk niet weergegeven. Dit komt doordat de IDE automatisch bepaalde opdrachten verbergt of weergeeft, afhankelijk van interfaces die de VSPackage heeft (of niet) heeft geïmplementeerd. De implementatie van een VSPackage van sommige buildinterfaces zorgt er bijvoorbeeld voor dat menu-items die betrekking hebben op de build automatisch worden weergegeven.
Het toepassen van de
CommandWellOnlyvlag in de definitie van het UI-element betekent dat de opdracht alleen kan worden toegevoegd door aanpassing.Opdrachten zijn mogelijk alleen beschikbaar in bepaalde UI-contexten, bijvoorbeeld alleen wanneer een dialoogvenster wordt weergegeven wanneer de IDE zich in de ontwerpweergave bevindt.
Als u wilt dat bepaalde UI-elementen worden weergegeven in de IDE, moet u een of meer interfaces implementeren of code schrijven.