Přidání podnabídky do nabídky
Tento názorný postup vychází z ukázky v nabídce Přidat nabídku na řádek nabídek sady Visual Studio tím, že ukazuje, jak přidat podnabídku do nabídky TestMenu .
Podnabídka je sekundární nabídka, která se zobrazí v jiné nabídce. Podnabídku lze identifikovat pomocí šipky, která následuje za jejím názvem. Po kliknutí na název se podnabídka a její příkazy zobrazí.
Tento návod vytvoří podnabídku v nabídce na řádku nabídek sady Visual Studio a vloží nový příkaz do podnabídky. Průvodce také implementuje nový příkaz.
Přidání podnabídky do nabídky
Podle pokynů v části Přidat nabídku na řádek nabídek sady Visual Studio vytvořte projekt a položku nabídky. Kroky v tomto návodu předpokládají, že název projektu VSIX je
TopLevelMenu
.Otevřete TestCommandPackage.vsct.
<Symbols>
V části přidejte<IDSymbol>
prvek pro podnabídku, jeden pro skupinu podnabídek a druhý pro příkaz, vše v<GuidSymbol>
uzlu s názvem guidTopLevelMenuCmdSet. Jedná se o stejný uzel, který obsahuje<IDSymbol>
prvek pro nabídku nejvyšší úrovně.<IDSymbol name="SubMenu" value="0x1100"/> <IDSymbol name="SubMenuGroup" value="0x1150"/> <IDSymbol name="cmdidTestSubCommand" value="0x0105"/>
Přidejte do oddílu nově vytvořenou podnabídku
<Menus>
.<Menu guid="guidTestCommandPackageCmdSet" id="SubMenu" priority="0x0100" type="Menu"> <Parent guid="guidTestCommandPackageCmdSet" id="MyMenuGroup"/> <Strings> <ButtonText>Sub Menu</ButtonText> <CommandName>Sub Menu</CommandName> </Strings> </Menu>
Dvojice GUID/ID nadřazeného objektu určuje skupinu nabídek vygenerovanou v nabídce Přidat do řádku nabídek sady Visual Studio a je podřízenou položkou nabídky nejvyšší úrovně.
Přidejte skupinu nabídek definovanou v kroku 2 do oddílu
<Groups>
a nastavte ji jako podřízenou podnabídku.<Group guid="guidTestCommandPackageCmdSet" id="SubMenuGroup" priority="0x0000"> <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/> </Group>
Přidejte do oddílu
<Buttons>
nový<Button>
prvek, který definuje příkaz vytvořený v kroku 2 jako položku v podnabídce.<Button guid="guidTestCommandPackageCmdSet" id="cmdidTestSubCommand" priority="0x0000" type="Button"> <Parent guid="guidTestCommandPackageCmdSet" id="SubMenuGroup" /> <Icon guid="guidImages" id="bmpPic2" /> <Strings> <CommandName>cmdidTestSubCommand</CommandName> <ButtonText>Test Sub Command</ButtonText> </Strings> </Button>
Sestavte řešení a spusťte ladění. Měla by se zobrazit experimentální instance.
Kliknutím na testMenu zobrazíte novou podnabídku s názvem Podnabídka. Kliknutím na podnabídku otevřete podnabídku a zobrazí se nový příkaz Test Sub Command. Všimněte si, že kliknutí na příkaz Test Sub nic nedělá.
Přidání příkazu
Otevřete TestCommand.cs a za existující ID příkazu přidejte následující ID příkazu.
public const int cmdidTestSubCmd = 0x0105;
Přidejte dílčí příkaz. Vyhledejte konstruktor příkazů. Přidejte následující řádky těsně za volání metody
AddCommand
.CommandID subCommandID = new CommandID(CommandSet, cmdidTestSubCmd); MenuCommand subItem = new MenuCommand(new EventHandler(SubItemCallback), subCommandID); commandService.AddCommand(subItem);
Obslužná rutina
SubItemCallback
příkazu bude definována později. Konstruktor by teď měl vypadat takto:private TestCommand(Package package) { if (package == null) { throw new ArgumentNullException("package"); } this.package = package; OleMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; if (commandService != null) { var menuCommandID = new CommandID(CommandSet, CommandId); var menuItem = new MenuCommand(this.MenuItemCallback, menuCommandID); commandService.AddCommand(menuItem); CommandID subCommandID = new CommandID(CommandSet, cmdidTestSubCmd); MenuCommand subItem = new MenuCommand(new EventHandler(SubItemCallback), subCommandID); commandService.AddCommand(subItem); } }
Přidat
SubItemCallback()
. Jedná se o metodu, která se volá při kliknutí na nový příkaz v podnabídce.private void SubItemCallback(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); IVsUIShell uiShell = this.package.GetService<SVsUIShell, IVsUIShell>(); Guid clsid = Guid.Empty; int result; uiShell.ShowMessageBox( 0, ref clsid, "TestCommand", string.Format(CultureInfo.CurrentCulture, "Inside TestCommand.SubItemCallback()", this.ToString()), string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, out result); }
Sestavte projekt a spusťte ladění. Měla by se zobrazit experimentální instance.
V nabídce TestMenu klepněte na příkaz Sub Menu a potom klepněte na příkaz Test Sub. Mělo by se zobrazit okno se zprávou a zobrazit text "Test Command Inside TestCommand.SubItemCallback()".