Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
SubItemCallbackpří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()".