创建可重用的按钮组
命令组是始终显示在菜单或工具栏上的命令集合。 通过将命令组分配给 .vsct 文件的 CommandPlacements 节中的不同父菜单,可以重新使用任何命令组。
命令组通常包含按钮,但它们也可以包含其他菜单或组合框。
创建可重用的按钮组
创建名为
ReusableButtons
. 的 VSIX 项目。 有关详细信息,请参阅 使用菜单命令创建扩展。项目打开时,添加一个名为“可重用命令”的自定义命令项模板。 在“解决方案资源管理器”中,右键单击项目节点并选择“添加”>“新建项”。 在“添加新项”对话框中,转到 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 和 ID 属性与“符号”部分给出的属性相同。 也可以使用现有组,也可以使用命令模板提供的条目,如以下示例所示。 此组显示在 “工具” 菜单上
<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 节中创建一个条目,该条目必须放置在 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 命令从注册表创建最终接口的顺序可能不一致。
在菜单上放置可重用的按钮组
在
CommandPlacements
节中创建一个条目。 将元素的CommandPlacement
GUID 和 ID 设置为组的 GUID 和 ID,并将父 GUID 和 ID 设置为目标位置的 GUID 和 ID。CommandPlacements 节应放在 Commands 节后面:
<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>