【问题标题】:Can't assign shortcut key to VSIX dynamic menu comand无法将快捷键分配给 VSIX 动态菜单命令
【发布时间】:2015-09-18 00:14:12
【问题描述】:

我需要为 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”和“动态命令 2”来代替您在 .vsct 文件中看到的“最小测试”命令。菜单显示正确:

工具

最少的命令 >

动态命令 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 不会导致问题。

【问题讨论】:

    标签: c# menuitem vsix


    【解决方案1】:

    根据引用的帖子,我定义了几个占位符按钮,它们都没有 DynamicItemStart 属性,但每个都具有 DefaultInvisible、DynamicVisibility 和 TextChanges 属性。在我的 QueryStatus 处理程序中,我使用 OLETEXTCMD 类(可在此站点上找到)将名称从 Placeholderxxx 更改为更有用的名称。菜单按我希望的那样显示。在引用的帖子中也注意到唯一的故障是键盘快捷键列表使用 Placeholderxxx 名称。由于这个缺陷,我不打算将我的扩展(我需要让 VS 2015 有用的宏处理器)发布到野外。

    我确实希望有更好的解决方案来解决定义动态菜单项的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 2014-10-06
      • 1970-01-01
      • 2011-03-15
      • 2014-11-25
      相关资源
      最近更新 更多