Мне нужно назначить комбинацию клавиш для динамического элемента меню в расширении VS 2015. Файл VSCT выглядит следующим образом:Невозможно назначить комбинацию клавиш для динамического командного меню VSIX
<?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>
У меня есть код, который добавляет «Dynamic Command 1» и «Dynamic Command 2» вместо команды «Minimal Test», которую вы видите в файле .vsct. В меню отображается правильно:
Инструменты
Минимально Команды >
Dynamic Команда 1
Dynamic Command 2
Нажатие на меню вызывает обработчик. Все идет нормально.
Теперь проблема: я не вижу две динамические команды в списке Tools.Options.Keyboard. Основываясь на неотвеченном вопросе на Can one assign keyboard shortcuts to Visual Studio 2012 extensibility package commands that use DynamicItemStart?, кажется, что проблема связана с наличием пунктов меню, которые накладывают DynamicItemStart. Мой пример более сложный, потому что он использует другой GUID для подменю динамической команды. [У моего реального приложения есть командный фильтр, полученный из IOleCommandTarget. Он зависает непосредственно перед QueryStatus, если элемент DynamicItemStart находится в той же группе GUID, что и фиксированные команды.] Но я не думаю, что несколько GUID способствуют этой проблеме.