Создание повторно используемых групп кнопок
Группа команд — это коллекция команд, которые всегда отображаются вместе в меню или панели инструментов. Любую группу команд можно повторно использовать, назначив ее разным родительским меню в разделе CommandPlacements файла VSCT .
Группы команд обычно содержат кнопки, но они также могут содержать другие меню или поля со списком.
Создание повторно используемых групп кнопок
Создайте проект VSIX с именем
ReusableButtons
. Дополнительные сведения см. в разделе "Создание расширения" с помощью команды меню.Когда проект откроется, добавьте пользовательский шаблон элемента командной строки с именем ReusableCommand. Щелкните правой кнопкой мыши узел проекта в Обозревателе решений, а затем выберите Добавить>Новый элемент. В диалоговом окне "Добавление нового элемента" перейдите в Visual C#>Extensibility и выберите "Пользовательская команда". В поле "Имя" в нижней части окна измените имя файла команды на ReusableCommand.cs.
В VSCT-файле перейдите в раздел "Символы" и найдите элемент GuidSymbol, содержащий группы и команды для проекта. Он должен называться guidReusableCommandPackageCmdSet.
Добавьте 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 для каждой из них.
В разделе "Группы" создайте элемент Group с теми же атрибутами GUID и идентификатора, что и в разделе "Символы". Можно также использовать существующую группу или использовать запись, предоставленную шаблоном команды, как показано в следующем примере. Эта группа отображается в меню "Сервис"
<Groups> <Group guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/> </Group> </Groups>
Создание группы кнопок для повторного использования
Вы можете поместить команду или меню в группу с помощью группы в качестве родительского элемента в определении команды или меню, либо поместить команду или меню в группу с помощью раздела 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>
Если кнопка должна отображаться в нескольких группах, создайте запись для нее в разделе CommandPlacements, который должен быть помещен после раздела "Команды". Задайте атрибуты GUID и идентификатора элемента CommandPlacement, чтобы они соответствовали атрибутам кнопки, которую вы хотите разместить, а затем задайте идентификатор GUID и идентификатор родительского элемента для целевой группы, как показано в следующем примере.
<CommandPlacements> <CommandPlacement guid="guidReusableCommandPackageCmdSet" id="SecondReusableCommandId" priority="0x105"> <Parent guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" /> </CommandPlacement> </CommandPlacements>
Примечание.
Значение поля Priority определяет позицию команды в новой группе команд. Приоритеты, заданные в элементе CommandPlacement, переопределяют эти наборы в определении элемента. Команды с более низким приоритетом отображаются перед командами с более высоким приоритетом. Допустимы повторяющиеся значения приоритета, но относительная позиция команд с одинаковым значением приоритета не может быть гарантирована, так как порядок, в котором команда devenv /setup создает конечный интерфейс из реестра, может быть не согласован.
Добавление повторно используемых кнопок в меню
Создайте запись в
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>