4

我按照这个演练描述为工具窗口定义了一个工具栏。

将新按钮添加到工具栏,并将它们连接到我的包中的代码,没有问题并且工作正常(所以我不是在寻找有关如何添加简单按钮的信息)。我看到还有其他按钮类型,例如SplitDropDownMenuButton。两者都完全符合我的要求。但是我找不到任何关于如何以正确方式定义子菜单的信息,我所有的实验都失败了。

这是我的按钮定义:

<Button guid="guidVsCmdSet" id="cmdIdSplitDowndown" priority="0x106" type="SplitDropDown">
  <Parent guid="guidVsCmdSet" id="VsToolbarGroup" />
  <Icon guid="guidImages" id="bmpPic2" />
  <CommandFlag>IconAndText</CommandFlag>
  <Strings>
    <CommandName>cmdIdSplitDropdown</CommandName>
    <ButtonText>Goto Next</ButtonText>
  </Strings>
</Button>

我想添加一个SplitDropDown具有一些预定义/静态子项的按钮。我猜按钮的视觉外观看起来像 Visual Studio 的“向后导航”按钮。这就是我想要达到的目标。

有谁知道SplitDropDown按钮的定义,有一个子菜单,会是什么样子?

4

2 回答 2

7

Visual Studio IDE似乎不再支持SplitDropDownandMenuButton类型(至少 v11,但我没有在早期版本上测试过。也许我错了,但我无法将这些按钮放入我的工具栏中) . 相反,可以使用Menuor类型的菜单。MenuController该类型的Menu行为类似于 deprecated MenuButton(即使它的视觉外观并不完全相同,因为它的按钮高度较小)并且该类型的MenuController行为类似于 deprecated SplitDropDown

因此,为了获得拆分下拉菜单,我在 VSCT 文件中添加了以下菜单声明:

<Menu guid="guidVsCmdSet" id="menuIdSubMenu" type="MenuController" priority="0x0001" toolbarPriorityInBand="0x0001">
    <Parent guid="guidVsCmdSet" id="VsToolbarGroup" />
    <CommandFlag>IconAndText</CommandFlag>
    <CommandFlag>NotInTBList</CommandFlag>
    <Strings>
        <ButtonText>My Button</ButtonText>
        <CommandName>My Button</CommandName>
    </Strings>
</Menu>

并为下拉命令创建了一个新组;该组的父级设置为菜单。

<Group guid="guidVsCmdSet" id="VsSubMenuGroup" priority="0x0001">
    <Parent guid="guidVsCmdSet" id="menuIdSubMenu" />
</Group>

最后,我可以将普通按钮添加到该组中,它们将显示为菜单项。

<Button guid="guidVsCmdSet" id="cmdIdSubMenuItem1" priority="0x0001" type="Button">
    <Parent guid="guidVsCmdSet" id="VsSubMenuGroup" />
    <CommandFlag>TextOnly</CommandFlag>
    <Strings>
        <CommandName>cmdIdSubMenuItem1</CommandName>
        <ButtonText>Members</ButtonText>
    </Strings>
</Button>
于 2013-01-14T10:15:29.313 回答
3

Matze 的解决方案将显示MenuController为文本。如果您想显示MenuController为图标,例如 VS 工具箱中的撤消或重做,您可以为 : 添加一个Button作为锚项MenuController

  <Button guid="guidVsCmdSet" id="AnchorButton" priority="0x0100" type="Button">
    <Parent guid="guidVsCmdSet" id="VsSubMenuGroup" />
    <Icon guid="guidIcons" id="IconId" />
    <CommandFlag>NoShowOnMenuController</CommandFlag>  
    <!-- Become the permanent anchor item for the menu controller -->  
    <CommandFlag>FixMenuController</CommandFlag>
    <CommandFlag>Pict</CommandFlag>
    <Strings>
      <ButtonText>Button Text</ButtonText>
    </Strings>
  </Button>

关键是NoShowMenuControllerFixMenuController CommandFlag

我花了几个小时才弄明白,直到我看到这个页面:https ://docs.microsoft.com/en-us/visualstudio/extensibility/dynamically-adding-menu-items?view=vs-2017

于 2018-09-21T02:36:30.517 回答