我想构建一个VS外接程序,它扩展了解决方案资源管理器上下文菜单。
我知道如何使用IDM_VS_CTXT_ITEMNODE或IDM_VS_CTXT_PROJNODE添加IDM_VS_CTXT_ITEMNODE或IDM_VS_CTXT_PROJNODE,如下所示
<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文件为孩子声明了父母,所以我不能只声明一个孩子并将其链接到多个父母。
如何将相同的菜单添加到Project和Item上下文菜单?我想避免复制粘贴的grpIdMenuProjectItem子程序,这是可能的。
整个源代码示例可在github找到
发布于 2020-06-15 09:01:03
解决办法是像佩里所说的那样使用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节点如文件所示之后添加。
发布于 2020-06-12 03:33:00
将SubMenu添加到VS解决方案资源管理器项目和项节点类型
您可以使用使一个按钮在多个菜单中使用的CommandPlacements。
溶液
通常是,您可以使用这种格式来实现您的需求:
<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_ITEMNODE和IDM_VS_CTXT_PROJNODE。
自以来,您已经在IDM_VS_CTXT_ITEMNODE下的QQQ 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>https://stackoverflow.com/questions/62302909
复制相似问题