创建可重用的按钮组

命令组是始终显示在菜单或工具栏上的命令集合。 通过将命令组分配给 .vsct 文件的 CommandPlacements 节中的不同父菜单,可以重新使用任何命令组。

命令组通常包含按钮,但它们也可以包含其他菜单或组合框。

创建可重用的按钮组

  1. 创建名为 ReusableButtons. 的 VSIX 项目。 有关详细信息,请参阅 使用菜单命令创建扩展。

  2. 项目打开时,添加一个名为“可重用命令”自定义命令项模板。 在“解决方案资源管理器”中,右键单击项目节点并选择“添加”>“新建项”。 在“添加新项”对话框中,转到 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 和 ID 属性与“符号”部分给出的属性相同。 也可以使用现有组,也可以使用命令模板提供的条目,如以下示例所示。 此组显示在 “工具” 菜单上

    <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 节中创建一个条目,该条目必须放置在 Commands 节之后。 设置 CommandPlacement 元素的 GUID 和 ID 属性以匹配要定位的按钮的属性,然后将其 Parent 元素的 GUID 和 ID 设置为目标组的 GUID 和 ID,如以下示例所示。

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

    注意

    “优先级”字段的值确定命令在新命令组中的位置。 CommandPlacement 元素中设置的优先级将覆盖项定义中设置的优先级。 具有较低优先级值的命令显示在具有较高优先级值的命令之前。 允许重复的优先级值,但无法保证具有相同优先级值的命令的相对位置,因为 devenv /setup 命令从注册表创建最终接口的顺序可能不一致。

在菜单上放置可重用的按钮组

  1. CommandPlacements 节中创建一个条目。 将元素的 CommandPlacement GUID 和 ID 设置为组的 GUID 和 ID,并将父 GUID 和 ID 设置为目标位置的 GUID 和 ID。

    CommandPlacements 节应放在 Commands 节后面:

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

    命令组可以包含在多个菜单上。 父菜单可以是你创建的菜单,由 Visual Studio 提供(如 ShellCmdDef.vsctSharedCmdDef.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>