将子菜单添加到Visual Studio Extension中的上下文菜单

时间:2016-09-01 15:04:06

标签: c# visual-studio-extensions

我想在Visual Studio的上下文菜单中添加子菜单。类似于resharper的作用: resharper submenu

我的设置如下: MyTopMenuGroup:包含Command1MyMenuController。 MenuController本身又有另一个组,其中包含一些其他命令。不幸的是,没有显示MenuController。

我的XAML:

<Groups>
  <Group guid="mypkg" id="MyTopMenuGroup" >
    <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />
  </Group>
  <Group guid="mypkg" id="MySubMenuGroup">
    <Parent guid="mypkg" id="MyMenuController" />
  </Group>
</Groups>

<Menus>
  <Menu guid="mypkg" id="MyMenuController" type="MenuController">
    <Parent guid="mypkg" id="MyTopMenuGroup" />
  </Menu>
</Menus>

<Buttons>
  <Button guid="mypkg" id="Command1" type="Button">
    <Parent guid="mypkg" id="MyTopMenuGroup" />
  </Button>
  <Button guid="mypkg" id="Command2" type="Button">
    <Parent guid="mypkg" id="MyMenuController" />
  </Button>
  <Button guid="mypkg" id="Command3" type="Button">
    <Parent guid="mypkg" id="MySubMenuGroup" />
  </Button>
  <Button guid="mypkg" id="Command4" type="Button">
    <Parent guid="mypkg" id="MySubMenuGroup" />
  </Button>
</Buttons>

C#将按钮添加到菜单中:

OleMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
if (commandService != null)
{
    var menuCommandID = new CommandID(CommandSet, Command1);
    var menuItem = new MenuCommand(this.MenuItemCallback, menuCommandID);
    commandService.AddCommand(menuItem);

    //etc, do this for all 4 Commands
    //no code to construct groups & menus (is this necessary?)
}

Command1按预期显示为“顶级”命令。 其他命令和菜单根本不显示。

为什么菜单未显示,如何将其显示?

1 个答案:

答案 0 :(得分:1)

你的XAML看起来很好(我认为按钮和菜单实际上有字符串部分)并且Command3 / Command4应该是可见的。只需确保它们像Command1一样附加了MenuItemCallback。