我成功找到了上下文菜单的正确命令组。原来,各种编辑器都使用单独的上下文 ID,因此必须将它们作为单独的菜单进行管理,否则会变得混乱。
步骤
- 我使用了
HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0\General
键和 EnableVSIPLogging 值为 1,以启用日志记录。
- 然后,我在编辑器中导航,在空白区域上按下 CTRL-SHIFT 并右键单击鼠标。
这会给信息一个像 menu group
的菜单组,并且看起来像这样:
VSDebug Message
Menu data:
Guid = {D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}
GuidID = 358
CmdID = 53
Type = 0x00000400
Flags = 0x00000000
NameLoc = ASPX Context
OK
重要的值是GUID和CommandID。
在Symbols
下添加Guid和Command ID,如下所示,以注册命令集将Guid映射到CommandSet,将CommandId映射到上下文菜单值:
<GuidSymbol name="aspxContextCommandSet" value="{D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}">
<IDSymbol name="aspxContextMenu" value="0x0035"/>
</GuidSymbol>
请注意,该值映射到表示为十六进制值的CommandID。
然后,在“组”部分中引用此组作为您的命令组(MyMenuGroup)的父级组:
<Group guid="guidViewInBrowserPackageCmdSet" id="MyMenuGroup" priority="0x0000">
<Parent guid="aspxContextCommandSet" id="aspxContextMenu"/>
</Group>
您引用您为命令按钮创建的菜单组,并指向在先前步骤中创建的上下文菜单。
如果您想对多个编辑器执行此操作(例如 ASPX、HTML 和 Code 编辑器,就像我一样),则必须为每个编辑器重复此过程,通过添加 GuidSymbol 和 Group。您将最终获得针对不同父项指向同一 MenuGroup 的多个 Group 条目,并且所有条目都会正确激活。
效果很好,但您可能需要使用 BeforeQueryStatus 事件处理程序过滤您的 OleMenuCommand 对象,以确保菜单仅在您实际可处理时才显示。