Поделиться через


Создание повторно используемых групп кнопок

Группа команд — это коллекция команд, которые всегда отображаются вместе в меню или панели инструментов. Любую группу команд можно повторно использовать, назначив ее разным родительским меню в разделе CommandPlacements файла VSCT .

Группы команд обычно содержат кнопки, но они также могут содержать другие меню или поля со списком.

Создание повторно используемых групп кнопок

  1. Создайте проект VSIX с именем ReusableButtons. Дополнительные сведения см. в разделе "Создание расширения" с помощью команды меню.

  2. Когда проект откроется, добавьте пользовательский шаблон элемента командной строки с именем ReusableCommand. Щелкните правой кнопкой мыши узел проекта в Обозревателе решений, а затем выберите Добавить>Новый элемент. В диалоговом окне "Добавление нового элемента" перейдите в Visual C#>Extensibility и выберите "Пользовательская команда". В поле "Имя" в нижней части окна измените имя файла команды на ReusableCommand.cs.

  3. В VSCT-файле перейдите в раздел "Символы" и найдите элемент GuidSymbol, содержащий группы и команды для проекта. Он должен называться guidReusableCommandPackageCmdSet.

  4. Добавьте idSymbol для каждой кнопки, которую вы добавите в группу, как показано в следующем примере.

    <GuidSymbol name="guidReusableCommandPackageCmdSet" value="{7f383b2a-c6b9-4c1d-b4b8-a26dc5b60ca1}">
        <IDSymbol name="MyMenuGroup" value="0x1020" />
        <IDSymbol name="ReusableCommandId" value="0x0100" />
        <IDSymbol name="SecondReusableCommandId" value="0x0200" />
    </GuidSymbol>
    

    По умолчанию шаблон элемента команды создает группу с именем MyMenuGroup и кнопку с указанным именем вместе с записью IDSymbol для каждой из них.

  5. В разделе "Группы" создайте элемент Group с теми же атрибутами GUID и идентификатора, что и в разделе "Символы". Можно также использовать существующую группу или использовать запись, предоставленную шаблоном команды, как показано в следующем примере. Эта группа отображается в меню "Сервис"

    <Groups>
        <Group guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" priority="0x0600">
              <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
        </Group>
    </Groups>
    

Создание группы кнопок для повторного использования

  1. Вы можете поместить команду или меню в группу с помощью группы в качестве родительского элемента в определении команды или меню, либо поместить команду или меню в группу с помощью раздела CommandPlacements.

    В разделе "Кнопки" определите кнопку с группой в качестве родительского элемента или используйте кнопку, предоставляемую шаблоном пакета, как показано в следующем примере.

    <Button guid="guidReusableCommandPackageCmdSet" id="ReusableCommandId" priority="0x0100" type="Button">
        <Parent guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" />
        <Icon guid="guidImages" id="bmpPic1" />
        <Strings>
            <ButtonText>Invoke ReusableCommand</ButtonText>
        </Strings>
    </Button>
    
  2. Если кнопка должна отображаться в нескольких группах, создайте запись для нее в разделе CommandPlacements, который должен быть помещен после раздела "Команды". Задайте атрибуты GUID и идентификатора элемента CommandPlacement, чтобы они соответствовали атрибутам кнопки, которую вы хотите разместить, а затем задайте идентификатор GUID и идентификатор родительского элемента для целевой группы, как показано в следующем примере.

    <CommandPlacements>
        <CommandPlacement guid="guidReusableCommandPackageCmdSet" id="SecondReusableCommandId" priority="0x105">
          <Parent guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" />
        </CommandPlacement>
    </CommandPlacements>
    

    Примечание.

    Значение поля Priority определяет позицию команды в новой группе команд. Приоритеты, заданные в элементе CommandPlacement, переопределяют эти наборы в определении элемента. Команды с более низким приоритетом отображаются перед командами с более высоким приоритетом. Допустимы повторяющиеся значения приоритета, но относительная позиция команд с одинаковым значением приоритета не может быть гарантирована, так как порядок, в котором команда devenv /setup создает конечный интерфейс из реестра, может быть не согласован.

Добавление повторно используемых кнопок в меню

  1. Создайте запись в CommandPlacements разделе. Задайте идентификатор GUID и идентификатор элемента для группы, а родительский GUID и идентификатор CommandPlacement — целевому расположению.

    Раздел CommandPlacements должен размещаться сразу после раздела "Команды".

    <CommandTable>
    ...
      <Commands>... </Commands>
      <CommandPlacements>... </CommandPlacements>
    ...
    </CommandTable>
    

    Группу команд можно включить в несколько меню. Родительское меню может быть созданным, которое предоставляется Visual Studio (как описано в ShellCmdDef.vsct или SharedCmdDef.vsct) или в другом VSPackage. Количество родительских слоев неограниченно, если родительское меню в конечном итоге подключено к Visual Studio или контекстное меню, отображаемое VSPackage.

    В следующем примере группа помещется на панель инструментов Обозреватель решений справа от других кнопок.

    <CommandPlacements>
        <CommandPlacement guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" priority="0xF00">
          <Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/>
        </CommandPlacement>
    </CommandPlacements>
    
    <CommandPlacements>
      <CommandPlacement guid="guidButtonGroupCmdSet" id="MyMenuGroup"
          priority="0x605">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS" />
      </CommandPlacement>
    </CommandPlacements>