我设法实现了动态添加菜单项
这允许动态添加菜单命令。这很好,但它是一个平面的 1 级动态菜单。
是否可以创建动态子菜单并将其附加到命令?
静态方法是创建:菜单>组>按钮>组>菜单,但我没有找到并为此暴露对象。
感谢您的帮助!
谢谢。
这是一个有点过时的问题,但是由于我遇到了同样的问题(仅在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 做到这一点。命令(custed eiter to EnvDTE.Commands 或 EnvDTE80.Command2),但我没有使用它,这意味着我没有充分调查它,也没有确保它在这种特殊情况下有效。
附言您需要将 Microsoft.VisualStudio.CommandBars.dll 添加到引用中才能完成此操作(或者您需要将对象转换为动态对象)