我按照下面的演练描述定义了工具窗口的工具栏。
向工具栏添加新按钮,并将它们连接到我的包内的代码,没有问题,工作正常(所以我不是在寻找如何添加简单按钮的信息)。我看到还有其他类型的按钮,比如SplitDropDown
和MenuButton
。两者都完全符合我的要求。但是我找不到任何关于如何正确定义子菜单的信息,我所有的实验都失败了。
<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
按钮的定义,有一个子菜单,会是什么样子?
似乎SplitDropDown
和MenuButton
类型不再被Visual Studio IDE(至少v11)支持,但我还没有在更早的版本上测试过。也许我错了,但我不能把这些按钮到我的工具栏)。相反,可以使用类型为Menu
或MenuController
的Menu。类型Menu
的行为类似于已弃用的MenuButton
(即使它的视觉外观不完全相同,因为它的按钮高度较小),类型MenuController
的行为类似于已弃用的SplitDropDown
。
<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>
关键是NoShowMenuController
和FixMenuController
CommandFlag
。
我花了几个小时才弄明白,直到我看到这个页面:https://learn.microsoft.com/en-us/visualstudio/extensibility/dynamically-adding-menu-items?view=vs-2017