如何为工具栏定义拆分下拉按钮或菜单按钮.vsct文件



我按照下面的演练描述定义了工具窗口的工具栏。

向工具栏添加新按钮,并将它们连接到我的包内的代码,没有问题,工作正常(所以我不是在寻找如何添加简单按钮的信息)。我看到还有其他类型的按钮,比如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按钮的定义,有一个子菜单,会是什么样子?

似乎SplitDropDownMenuButton类型不再被Visual Studio IDE(至少v11)支持,但我还没有在更早的版本上测试过。也许我错了,但我不能把这些按钮到我的工具栏)。相反,可以使用类型为MenuMenuController的Menu。类型Menu的行为类似于已弃用的MenuButton(即使它的视觉外观不完全相同,因为它的按钮高度较小),类型MenuController的行为类似于已弃用的SplitDropDown

因此,为了获得一个拆分下拉,我在VSCT文件中添加了以下Menu声明:
<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>

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://learn.microsoft.com/en-us/visualstudio/extensibility/dynamically-adding-menu-items?view=vs-2017

最新更新