【问题标题】:How to add sub menus dynamically in VSPackage (Visual Studio 2013 Package)如何在 VSPackage(Visual Studio 2013 包)中动态添加子菜单
【发布时间】:2014-01-12 01:18:14
【问题描述】:

我设法实现了Dynamically Adding Menu Items

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

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

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

感谢您的帮助!

谢谢。

【问题讨论】:

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


    【解决方案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 来做到这一点(把它交给 EnvDTE.Commands 或 EnvDTE80.Commands2),但我没有使用它,这意味着我没有完全调查它并且没有t 确保它在这种特殊情况下有效。

    附:您需要将 Microsoft.VisualStudio.CommandBars.dll 添加到引用中才能完成这项工作(或者您需要将对象转换为动态)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多