【问题标题】:Add SubMenu to VS solution explorer project and item node types将 SubMenu 添加到 VS 解决方案资源管理器项目和项节点类型
【发布时间】:2020-06-10 11:52:05
【问题描述】:

我想构建一个扩展解决方案资源管理器上下文菜单的 VS 插件

我知道如何使用IDM_VS_CTXT_ITEMNODEIDM_VS_CTXT_PROJNODE 添加VS add-in menu item,如下面的示例所示

<Group guid="guidCmdSet" id="grpIdMenuProjectItem" priority="0x0700">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />
</Group>

但是我想显示的菜单应该显示带有子项的复杂上下文菜单。 我想将相同的菜单项添加到 Project 和 Item 上下文菜单中。

所以我试过了

<Group guid="guidCmdSet" id="grpIdMenuProjectItem" priority="0x0700">
   <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />
   <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE"/>
</Group>

但 id 不起作用。

问题是vsct 文件为孩子声明了父母,所以我不能只声明一个孩子并将其链接到多个父母。

如何将相同的菜单添加到项目和项目上下文菜单中?我想避免复制粘贴 grpIdMenuProjectItem 孩子这是可能的。

整个源代码示例can be found at github

【问题讨论】:

  • 我认为你可以使用CommandPlacements 让一个按钮在多个不同的菜单中使用。

标签: visual-studio-2019 visual-studio-extensions


【解决方案1】:

将 SubMenu 添加到 VS 解决方案资源管理器项目和项节点类型

您可以使用CommandPlacements to make one button be used in several menus

解决方案

通常,您可以使用这种格式来实现您的需求:

 <CommandPlacements>
            <CommandPlacement guid="xxx(the same button guid)" id="xxx(the same button id)" priority="0xF00">
                <Parent guid="xxx(the first group guid)" id="xxx(the first group id)"/> 
            </CommandPlacement>

       <CommandPlacement guid="xxx(the same button guid)" id="xxx(the same button id)" priority="0xF00">
                <Parent guid="xxx(the second group guid)" id="xxx(the second group id)"/>   
            </CommandPlacement>

        ..........

    </CommandPlacements>

在您的情况下,例如,我将您的按钮Sample Menu Item 1 用于IDM_VS_CTXT_ITEMNODEIDM_VS_CTXT_PROJNODE

由于你在IDM_VS_CTXT_ITEMNODEQQQ Menu的子菜单中创建了Sample Menu Item 1,你只需要在CommandPlacements中定义按钮Sample Menu Item 1如下:

<CommandPlacements>
        <CommandPlacement guid="guidCmdSet" id="sampleMenuItem" priority="0xF00">
            <Parent guid="guidVSIXProject1PackageCmdSet" id="MyMenuGroup"/> 
        </CommandPlacement>
</CommandPlacements>

【讨论】:

    【解决方案2】:

    解决方案是像佩里所说的那样使用CommandPlacement

    为了使用子菜单项复制同一组,我从 grpIdMenuProjectItem 组声明中删除了父元素

    <Group guid="guidCmdSet" id="grpIdMenuProjectItem" priority="0x0700">
    </Group>
    

    并为项目、项目和文件夹父级添加了三个命令放置

    <CommandPlacements>
        <CommandPlacement guid="guidCmdSet" id="grpIdMenuProjectItem" priority="0xF00">
                <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />
        </CommandPlacement>
        <CommandPlacement guid="guidCmdSet" id="grpIdMenuProjectItem" priority="0xF00">
                <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE" />
        </CommandPlacement>
        <CommandPlacement guid="guidCmdSet" id="grpIdMenuProjectItem" priority="0xF00">
                <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_FOLDERNODE" />
        </CommandPlacement>
    </CommandPlacements>
    

    CommandPlacements 节点应添加在Commands 节点as documented 之后。

    【讨论】:

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