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

Visual studio 如何在VSPackage(Visual Studio 2013软件包)中动态添加子菜单,visual-studio,command,visual-studio-2013,visual-studio-addins,vspackage,Visual Studio,Command,Visual Studio 2013,Visual Studio Addins,Vspackage,我设法实现了 这允许动态添加菜单命令。这很好,但它是一个平面的1级动态菜单 是否可以创建动态子菜单并将其附加到命令 静态方法是创建: 菜单->组->按钮->组->菜单但我没有找到并显示该对象 谢谢你的帮助 谢谢。我知道这是一个有点过时的问题,但由于我也遇到了同样的问题(仅在vspackage for vs 2010中),我正在编写一个我发现的解决方法。也许它会为某人节省几个小时或几天的时间 首先,您需要找到要添加菜单/子菜单的位置,如下所示: EnvDTE.DTE dte = GetServic

我设法实现了

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

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

静态方法是创建: 菜单->组->按钮->组->菜单但我没有找到并显示该对象

谢谢你的帮助


谢谢。

我知道这是一个有点过时的问题,但由于我也遇到了同样的问题(仅在vspackage for vs 2010中),我正在编写一个我发现的解决方法。也许它会为某人节省几个小时或几天的时间

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

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或to EnvDTE80.Commands2)实现这一点,但我没有使用它,这意味着我没有对它进行全面调查,也没有确保它在这种特定情况下工作

另外,您需要将Microsoft.VisualStudio.CommandBars.dll添加到引用中以使其生效(或者您需要将对象强制转换为动态)