Как я могу вкладывать кнопки меню Tool для расширения VS?
Я строю свое первое расширение VS, поэтому мои текущие навыки в этой области сводятся к тому, чтобы следовать учебным пособиям и задавать вопросы. Расширение предназначено для шифрования / дешифрования раздела 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>
Это дает мне 2 кнопки в Tools
меню, а именно:
Encrypt Mail Settings
Decrypt Mail Settings
Я хотел бы иметь только одну кнопку верхнего уровня в Tools
меню с 2-мя вложенными кнопками, по одной для каждой операции, например:
Config Encryptor
...Encrypt Mail Settings
...Decrypt Mail Settings
Как мне достичь желаемого результата?
2 ответа
Сопутствующие документы по этому вопросу:
Добавить подменю в меню, Добавить меню в строку меню, GUID и идентификаторы для меню VS.
Что мы хотим:
Нажмите на Tools
меню в VS=> дисплей 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>
И не забудьте определить IDSymbol
в GuidSymbol
:
<!-- 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.Мы можем добавить подменю в существующее меню или пользовательское меню в соответствии с первым документом. В документах нет четкого описания того, как структурировать button, menu, group
и какова связь между ними, но проверьте содержимое в коде, который мы можем найти 1. Чтобы добавить submenu
в Tools menu
нам нужно установить группу в качестве ее родителя, а затем установить Tools menu
как его родитель.
2. И чтобы сгруппировать две кнопки в подменю, нам нужно установить родителя двух кнопок как GroupB, затем установить SubMenu в качестве родителя GroupB.
3. Согласно третьему документу, меню и группы в строке меню Visual Studio используют GUID guidSHLMainMenu. И удостоверение личности Tools menu
является IDM_VS_MENU_TOOLS
,
Вот почему я редактирую контент в этой структуре, к счастью, он работает. И так как я могу что-то неправильно понять в документах, если что-то не так или что-то может быть лучше, не стесняйтесь меня поправлять:)
Внешний вид при отладке:
К тому же:
1. Об управлении обработчиком команд смотрите это.
2. Посмотрите этот документ, который указывает, чтобы добавить подменю в другое меню VS, нам нужна группа в этом процессе. Чтобы добавить группу в существующее меню Visual Studio, установите одно из следующих меню в качестве родительского.
Вам нужно создать 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>
Также не забудьте добавить IDSymbol
за Group
а также GroupMenu
и установите правильное имя для инструментов id="ToolsMenu"