如何嵌套 VS 扩展的工具菜单按钮?
How can I nest Tool menu buttons for a VS extension?
我正在构建我的第一个 VS 扩展,所以我目前在这方面的技能相当于遵循教程和提出问题。该扩展名用于 encrypting/decryption Web 应用程序项目 web.config
文件的一部分。我有 2 个命令,目前按钮在 .vsct
文件中设置如下:
<Buttons>
<Button guid="guidEncryptConfigCommandPackageCmdSet" id="EncryptConfigCommandId" priority="0x0100" type="Button">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="MyMenuGroup" />
<Strings>
<ButtonText>Encrypt Mail Settings</ButtonText>
</Strings>
</Button>
<Button guid="guidEncryptConfigCommandPackageCmdSet" id="cmdidDecryptConfigCommand" priority="0x0100" type="Button">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="MyMenuGroup" />
<Strings>
<ButtonText>Decrypt Mail Settings</ButtonText>
</Strings>
</Button>
</Buttons>
这给了我 Tools
菜单中的 2 个按钮,如下所示:
Encrypt Mail Settings
Decrypt Mail Settings
我想在 Tools
菜单中只有一个顶级按钮,有 2 个嵌套按钮,每个操作一个,例如:
Config Encryptor
...Encrypt Mail Settings
...Decrypt Mail Settings
如何实现我想要的结果?
您需要为按钮创建 Menu
<Menus>
<Menu guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenu" priority="0x0100" type="Menu">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenuGroup"/>
<Strings>
<MenuText>Config Encryptor</MenuText>
<ButtonText>Config Encryptor</ButtonText>
<CommandName>Config Encryptor</CommandName>
</Strings>
</Menu>
</Menus>
并为 Group
设置 parents
<Group guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenuGroup" priority="0x0100">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenu"/>
</Group>
<Group guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenu" priority="0x0200">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ToolsMenu"/>
</Group>
另外不要忘记为 Group
和 GroupMenu
添加 IDSymbol
并为工具 id="ToolsMenu"
设置正确的名称
关于这个问题的相关文档:
Add submenu to menu, Add menu to menu bar, GUIDs and IDs for the VS Menus.
我们想要的:
点击VS中的Tools
菜单=>显示Config Encryptor
子菜单,点击Config Encryptor
菜单会显示Encrypt Mail Settings
和Decrypt Mail Settings
命令
我的结构xx.vsct:
Tools menu in IDE
--SubMenuGroup
--SubMenu1
--ButtonsGroup
--EncryptConfigCommandId(Encrypt Mail Settings)
--DecryptConfigCommandId(Decrypt Mail Settings)
Commands
段的真实内容:
<Commands package="guidEncryptConfigCommandPackage">
<Menus>
<Menu guid="guidEncryptConfigCommandPackageCmdSet" id="SubMenu1" priority="0x0100" type="Menu">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="SubMenuGroup"/>
<Strings>
<ButtonText>Config Encryptor</ButtonText>
<CommandName>Config Encryptor</CommandName>
</Strings>
</Menu>
</Menus>
<Groups>
<Group guid="guidEncryptConfigCommandPackageCmdSet" id="ButtonsGroup" priority="0x0600">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="SubMenu1"/>
</Group>
<Group guid="guidEncryptConfigCommandPackageCmdSet" id="SubMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>
</Groups>
<Buttons>
<Button guid="guidEncryptConfigCommandPackageCmdSet" id="EncryptConfigCommandId" priority="0x0100" type="Button">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ButtonsGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<Strings>
<ButtonText>Encrypt Mail Settings</ButtonText>
</Strings>
</Button>
<Button guid="guidEncryptConfigCommandPackageCmdSet" id="DecryptConfigCommandId" priority="0x0110" type="Button">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ButtonsGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<Strings>
<ButtonText>Decrypt Mail Settings</ButtonText>
</Strings>
</Button>
</Buttons>
<!--The bitmaps section is used to define the bitmaps that are used for the commands.-->
<Bitmaps>
<Bitmap guid="guidImages" href="Resources\EncryptConfigCommand.png" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows, bmpPicStrikethrough"/>
</Bitmaps>
</Commands>
并且不要忘记在 GuidSymbol
中定义 IDSymbol
:
<!-- This is the guid used to group the menu commands together -->
<GuidSymbol name="guidEncryptConfigCommandPackageCmdSet" value="{70c1a496-88b4-4c83-8539-39decdbdb8fb}">
<IDSymbol name="ButtonsGroup" value="0x1020" />
<IDSymbol name="EncryptConfigCommandId" value="0x0100" />
<IDSymbol name="DecryptConfigCommandId" value="0x0110" />
<IDSymbol name="SubMenu1" value="0x1100"/>
<IDSymbol name="SubMenuGroup" value="0x1150"/>
</GuidSymbol>
根据上面这三个文件:
1.We可以根据第一个document.Not文档中清楚描述的如何构造button, menu, group
以及它们之间的关系,将子菜单添加到现有菜单或自定义菜单,但是查看其代码中的内容,我们可以发现 1.要在Tools menu
中添加一个submenu
,我们需要将一个组设置为它的parent,然后将Tools menu
设置为它的parent。
2.And要将两个按钮分组为一个子菜单,我们需要将两个按钮的父级设置为GroupB,然后将子菜单设置为GroupB的父级。
3.According 到第三个文档,Visual Studio 菜单栏上的菜单和组使用 GUID guidSHLMainMenu。而Tools menu
的ID是IDM_VS_MENU_TOOLS
.
这就是我编辑此结构中内容的原因,幸运的是它有效。由于我可能误解了文档中的某些内容,如果有什么不对的地方或者可以更好的地方,请随时纠正我:)
调试时的样子:
另外:
1.About 管理命令的处理程序请参阅 this。
2.See this document表示将子菜单添加到另一个VS菜单,这个过程需要一个组。
要将组添加到现有 Visual Studio 菜单,请将以下菜单之一设置为其父菜单。
我正在构建我的第一个 VS 扩展,所以我目前在这方面的技能相当于遵循教程和提出问题。该扩展名用于 encrypting/decryption Web 应用程序项目 web.config
文件的一部分。我有 2 个命令,目前按钮在 .vsct
文件中设置如下:
<Buttons>
<Button guid="guidEncryptConfigCommandPackageCmdSet" id="EncryptConfigCommandId" priority="0x0100" type="Button">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="MyMenuGroup" />
<Strings>
<ButtonText>Encrypt Mail Settings</ButtonText>
</Strings>
</Button>
<Button guid="guidEncryptConfigCommandPackageCmdSet" id="cmdidDecryptConfigCommand" priority="0x0100" type="Button">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="MyMenuGroup" />
<Strings>
<ButtonText>Decrypt Mail Settings</ButtonText>
</Strings>
</Button>
</Buttons>
这给了我 Tools
菜单中的 2 个按钮,如下所示:
Encrypt Mail Settings
Decrypt Mail Settings
我想在 Tools
菜单中只有一个顶级按钮,有 2 个嵌套按钮,每个操作一个,例如:
Config Encryptor
...Encrypt Mail Settings
...Decrypt Mail Settings
如何实现我想要的结果?
您需要为按钮创建 Menu
<Menus>
<Menu guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenu" priority="0x0100" type="Menu">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenuGroup"/>
<Strings>
<MenuText>Config Encryptor</MenuText>
<ButtonText>Config Encryptor</ButtonText>
<CommandName>Config Encryptor</CommandName>
</Strings>
</Menu>
</Menus>
并为 Group
<Group guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenuGroup" priority="0x0100">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenu"/>
</Group>
<Group guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenu" priority="0x0200">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ToolsMenu"/>
</Group>
另外不要忘记为 Group
和 GroupMenu
添加 IDSymbol
并为工具 id="ToolsMenu"
关于这个问题的相关文档:
Add submenu to menu, Add menu to menu bar, GUIDs and IDs for the VS Menus.
我们想要的:
点击VS中的Tools
菜单=>显示Config Encryptor
子菜单,点击Config Encryptor
菜单会显示Encrypt Mail Settings
和Decrypt Mail Settings
命令
我的结构xx.vsct:
Tools menu in IDE
--SubMenuGroup
--SubMenu1
--ButtonsGroup
--EncryptConfigCommandId(Encrypt Mail Settings)
--DecryptConfigCommandId(Decrypt Mail Settings)
Commands
段的真实内容:
<Commands package="guidEncryptConfigCommandPackage">
<Menus>
<Menu guid="guidEncryptConfigCommandPackageCmdSet" id="SubMenu1" priority="0x0100" type="Menu">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="SubMenuGroup"/>
<Strings>
<ButtonText>Config Encryptor</ButtonText>
<CommandName>Config Encryptor</CommandName>
</Strings>
</Menu>
</Menus>
<Groups>
<Group guid="guidEncryptConfigCommandPackageCmdSet" id="ButtonsGroup" priority="0x0600">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="SubMenu1"/>
</Group>
<Group guid="guidEncryptConfigCommandPackageCmdSet" id="SubMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>
</Groups>
<Buttons>
<Button guid="guidEncryptConfigCommandPackageCmdSet" id="EncryptConfigCommandId" priority="0x0100" type="Button">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ButtonsGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<Strings>
<ButtonText>Encrypt Mail Settings</ButtonText>
</Strings>
</Button>
<Button guid="guidEncryptConfigCommandPackageCmdSet" id="DecryptConfigCommandId" priority="0x0110" type="Button">
<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ButtonsGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<Strings>
<ButtonText>Decrypt Mail Settings</ButtonText>
</Strings>
</Button>
</Buttons>
<!--The bitmaps section is used to define the bitmaps that are used for the commands.-->
<Bitmaps>
<Bitmap guid="guidImages" href="Resources\EncryptConfigCommand.png" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows, bmpPicStrikethrough"/>
</Bitmaps>
</Commands>
并且不要忘记在 GuidSymbol
中定义 IDSymbol
:
<!-- This is the guid used to group the menu commands together -->
<GuidSymbol name="guidEncryptConfigCommandPackageCmdSet" value="{70c1a496-88b4-4c83-8539-39decdbdb8fb}">
<IDSymbol name="ButtonsGroup" value="0x1020" />
<IDSymbol name="EncryptConfigCommandId" value="0x0100" />
<IDSymbol name="DecryptConfigCommandId" value="0x0110" />
<IDSymbol name="SubMenu1" value="0x1100"/>
<IDSymbol name="SubMenuGroup" value="0x1150"/>
</GuidSymbol>
根据上面这三个文件:
1.We可以根据第一个document.Not文档中清楚描述的如何构造button, menu, group
以及它们之间的关系,将子菜单添加到现有菜单或自定义菜单,但是查看其代码中的内容,我们可以发现 1.要在Tools menu
中添加一个submenu
,我们需要将一个组设置为它的parent,然后将Tools menu
设置为它的parent。
2.And要将两个按钮分组为一个子菜单,我们需要将两个按钮的父级设置为GroupB,然后将子菜单设置为GroupB的父级。
3.According 到第三个文档,Visual Studio 菜单栏上的菜单和组使用 GUID guidSHLMainMenu。而Tools menu
的ID是IDM_VS_MENU_TOOLS
.
这就是我编辑此结构中内容的原因,幸运的是它有效。由于我可能误解了文档中的某些内容,如果有什么不对的地方或者可以更好的地方,请随时纠正我:)
调试时的样子:
另外:
1.About 管理命令的处理程序请参阅 this。
2.See this document表示将子菜单添加到另一个VS菜单,这个过程需要一个组。 要将组添加到现有 Visual Studio 菜单,请将以下菜单之一设置为其父菜单。