不能为VSIX动态菜单命令指定快捷键
本文关键字:快捷键 命令 菜单 VSIX 动态 不能 | 更新日期: 2023-09-27 18:13:00
我需要在VS 2015扩展中为动态菜单项分配一个快捷键。vsct文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Extern href="stdidcmd.h"/>
<Extern href="vsshlids.h"/>
<Commands package="guidPackage">
<Groups>
<Group guid="guidMenu" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>
<Group guid="guidSubMenu" id="MyMenuSubgroup" priority="0x0100">
<Parent guid="guidMenu" id="SubMenu"/>
</Group>
</Groups>
<Menus>
<Menu guid="guidMenu" id="SubMenu" priority="0x0100" type="Menu">
<Parent guid="guidMenu" id="MyMenuGroup"/>
<Strings>
<ButtonText>Minimal commands</ButtonText>
<CommandName>MinimalCommands</CommandName>
</Strings>
</Menu>
</Menus>
<Buttons>
<Button guid="guidSubMenu" id="idTest" priority="0x0100" type="Button">
<Parent guid="guidSubMenu" id="MyMenuSubgroup" />
<CommandFlag>DynamicItemStart</CommandFlag>
<Strings>
<ButtonText>Invoke Minimal Test</ButtonText>
<CommandName>MinimalTest</CommandName>
</Strings>
</Button>
</Buttons>
</Commands>
<Symbols>
<GuidSymbol name="guidPackage" value="{3e88287b-7b79-403d-ae8d-3329af218869}" />
<GuidSymbol name="guidMenu" value="{c1388361-6429-452c-8ba0-580d292ef0ca}">
<IDSymbol name="MyMenuGroup" value="0x1020" />
<IDSymbol name="SubMenu" value="0x200"/>
</GuidSymbol>
<GuidSymbol name="guidSubMenu" value="{09E1B0D1-E466-4263-9D00-2EDCBDD954B2}">
<IDSymbol name="idTest" value="0x0100" />
<IDSymbol name="MyMenuSubgroup" value="0x1021"/>
</GuidSymbol>
</Symbols>
</CommandTable>
我的代码添加了"动态命令1"answers"动态命令2",以取代您在.vsct文件中看到的"最小测试"命令。菜单显示正确:
工具基本命令>
动态命令1
动态命令2
单击菜单调用处理程序。到目前为止一切顺利。
现在的问题是:我在Tools.Options.Keyboard列表中看不到这两个动态命令。基于未回答的问题,能否分配键盘快捷键到Visual Studio 2012使用DynamicItemStart的扩展包命令?,问题似乎是由于菜单项覆盖了DynamicItemStart。我的示例更复杂,因为它为动态命令子菜单使用了不同的GUID。[我的真实应用程序有一个命令过滤器派生自IOleCommandTarget。]如果DynamicItemStart项与固定命令在同一个GUID组中,则在QueryStatus之前挂起。但我不认为多个guid是造成这个问题的原因。
根据引用的帖子,我定义了几个占位符按钮,其中没有一个具有DynamicItemStart属性,但每个都具有DefaultInvisible, DynamicVisibility和TextChanges属性。在我的QueryStatus处理程序中,我使用OLETEXTCMD类(在此站点上找到)将名称从Placeholderxxx更改为更有用的名称。菜单像我所希望的那样显示出来。在引用的帖子中也注意到的唯一故障是键盘快捷键列表使用Placeholderxxx名称。由于这种不完善,我不打算将我的扩展(我需要使VS 2015有用的宏处理器)发布到野外。
我确实希望有一个更好的解决方案来定义动态菜单项的问题。