Как я могу вкладывать кнопки меню 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"

Другие вопросы по тегам