如何在VSPackage中动态添加子菜单(Visual Studio 2013包)

时间:2014-01-12 01:18:15

标签: visual-studio command visual-studio-2013 visual-studio-addins vspackage

我设法实施了 Dynamically Adding Menu Items

这允许动态添加菜单命令。这很不错,但它是一个平坦的1级动态菜单。

是否可以创建动态子菜单并将其附加到命令?

静态方式是创建: menu-> group-> button-> group-> menu 但我没有找到并公开对象。

感谢帮助!

感谢。

1 个答案:

答案 0 :(得分:1)

我知道这是一个有点过时的问题,但是由于我遇到了同样的问题(仅限于vs 2010的vspackage),我正在编写一个我找到的解决方法。也许它可以节省几个小时或几天。

首先,您需要找到要添加菜单/子菜单的位置,如下所示:

EnvDTE.DTE dte = GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
//EnvDTE80.Commands2 cmds = (EnvDTE80.Commands2)dte.Commands;
CommandBars cmdBars = dte.CommandBars as CommandBars;
CommandBar mainMenu = cmdBars.ActiveMenuBar;
CommandBarPopup parentBar = (CommandBarPopup)mainMenu.Controls["MyStaticBar"];

然后你可以为菜单组添加这样的新菜单组(CommandBarPopup实例)和菜单项(CommandBarButton实例):

CommandBarPopup newPopup = (CommandBarPopup)parentBar.Controls.Add(MsoControlType.msoControlPopup);
newPopup.Caption = "My Dynamic Menu group;
newPopup.Enabled = true;
newPopup.Visible = true;

这是菜单项

   CommandBarButton button = (CommandBarButton)newPopup.Controls.Add(MsoControlType.msoControlButton);
    button.Caption = "Custom menu item";
    button.Enabled = true;
    button.Visible = true;
    button.Click += new _CommandBarButtonEvents_ClickEventHandler(ExecuteCustomCommand);

还有一种方法可以通过dte.Commands(custed eiter to EnvDTE.Commands或EnvDTE80.Commands2)来完成此操作,但我没有使用它,这意味着我没有调查它完全没有确保它在这种特殊情况下有效。

P.S。您需要将Microsoft.VisualStudio.CommandBars.dll添加到引用以使其工作(或者您需要将对象强制转换为动态)