2015-09-16 65 views
1

我需要爲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> 

我有一些代碼來代替「最小測試」命令,在.vsct文件中看到的增加了「動態命令1」和「動態命令2」。菜單顯示正確:

工具

最小命令>

動態命令1
動態命令2

點擊菜單調用處理程序。到現在爲止還挺好。

現在的問題:我看不到Tools.Options.Keyboard列表中的兩個動態命令。基於在Can one assign keyboard shortcuts to Visual Studio 2012 extensibility package commands that use DynamicItemStart?未回答的問題,看起來問題來自於具有覆蓋DynamicItemStart的菜單項。我的例子更復雜,因爲它爲動態命令子菜單使用了不同的GUID。 [我真正的應用程序有一個從IOleCommandTarget派生的命令過濾器。如果DynamicItemStart項與固定命令位於同一個GUID組中,它將在QueryStatus之前掛起]但我不認爲多個GUID會導致問題。

回答

0

繼引用帖子之後,我定義了一些佔位符按鈕,其中沒有一個具有DynamicItemStart屬性,但每個按鈕都具有DefaultInvisible,DynamicVisibility和TextChanges屬性。在我的QueryStatus處理程序中,我使用OLETEXTCMD類(在此站點上找到)將Placeholderxxx中的名稱更改爲更有用的名稱。菜單顯示爲我所希望的。唯一的小故障,在引用的帖子中也注意到,鍵盤快捷鍵列表使用Placeholderxxx名稱。由於這個缺陷,我不打算將我的擴展(我需要使VS 2015變得有用的宏處理器)發佈到野外。

我確實希望有一個更好的解決方案來定義動態菜單項的問題。