将命令添加到解决方案资源管理器工具栏

本演练演示如何向解决方案资源管理器工具栏添加按钮

工具栏或菜单上的任何命令称为 Visual Studio 中的按钮。 单击按钮时,将执行命令处理程序中的代码。 通常,相关命令组合在一起,形成一个组。 菜单或工具栏充当组的容器。 优先级确定组中各个命令出现在菜单或工具栏中的顺序。 可以通过控制按钮的可见性来阻止按钮显示在工具栏或菜单上。 .vsct 文件的一<VisibilityConstraints>部分中列出的命令仅显示在关联的上下文中。 无法将可见性应用于组。

有关菜单、工具栏命令和 .vsct 文件的详细信息,请参阅 命令、菜单和工具栏

注意

使用 XML 命令表(.vsct)文件而不是命令表配置(.wifi)文件来定义菜单和命令在 VSPackage 中的显示方式。 有关详细信息,请参阅 Visual Studio 命令表(。Vsct) 文件

使用菜单命令创建扩展

创建名为 SolutionToolbar. 的 VSIX 项目。 添加名为 ToolbarButton菜单命令项模板。 有关如何执行此操作的信息,请参阅 使用菜单命令创建扩展。

将按钮添加到解决方案资源管理器工具栏

本演练的此部分演示如何向解决方案资源管理器工具栏添加按钮。 单击按钮时,将运行回调方法中的代码。

  1. ToolbarButtonPackage.vsct 文件中,转到该 <Symbols> 部分。 节点 <GuidSymbol> 包含包模板生成的菜单组和命令。 将元素 <IDSymbol> 添加到此节点,以声明将保存命令的组。

    <IDSymbol name="SolutionToolbarGroup" value="0x0190"/>
    
  2. 在该 <Groups> 部分中,在现有组条目之后,定义在上一步中声明的新组。

    <Group guid="guidToolbarButtonPackageCmdSet"
           id="SolutionToolbarGroup" priority="0xF000">
            <Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/>
          </Group>
    

    将父 GUID:ID 对设置为guidSHLMainMenuIDM_VS_TOOL_PROJWIN解决方案资源管理器工具栏并将此组置于解决方案资源管理器工具栏上,并设置高优先级值会将它置于其他命令组之后。

  3. 在该 <Buttons> 部分中,更改生成的 <Button> 条目的父 ID,以反映你在上一步中定义的组。 修改后的 <Button> 元素应如下所示:

    <Button guid="guidToolbarButtonPackageCmdSet" id="ToolbarButtonId" priority="0x0100" type="Button">
        <Parent guid="guidToolbarButtonPackageCmdSet" id="SolutionToolbarGroup" />
        <Icon guid="guidImages" id="bmpPicStrikethrough" />
        <Strings>
            <ButtonText>Invoke ToolbarButton</ButtonText>
        </Strings>
    </Button>
    
  4. 生成项目并启动调试。 这将显示实验实例。

    解决方案资源管理器工具栏应显示现有按钮右侧的新命令按钮。 按钮图标是删除线。

  5. 单击“新建”按钮。

    应显示一个对话框,其中包含 Message ToolbarButtonPackage Inside SolutionToolbar.ToolbarButton.MenuItemCallback()。

控制按钮的可见性

本演练的此部分演示如何控制工具栏上按钮的可见性。 通过将上下文设置为 SolutionToolbar.vsct 文件中的一个或多个项目<VisibilityConstraints>,可以将按钮限制为仅在打开项目或项目时显示。

打开一个或多个项目时显示按钮

  1. <Buttons> ToolbarButtonPackage.vsct 部分中,在标记之间<Icons><Strings>向现有<Button>元素添加两个命令标志。

    <CommandFlag>DefaultInvisible</CommandFlag>
    <CommandFlag>DynamicVisibility</CommandFlag>
    

    DefaultInvisible必须设置和DynamicVisibility标志,使节中的<VisibilityConstraints>条目生效。

  2. 创建包含两<VisibilityItem><VisibilityConstraints>条目的节。 将新节放在结束 </Commands> 标记之后。

    <VisibilityConstraints>
        <VisibilityItem guid="guidToolbarButtonPackageCmdSet"
              id="ToolbarButtonId"
              context="UICONTEXT_SolutionHasSingleProject" />
        <VisibilityItem guid="guidToolbarButtonPackageCmdSet"
              id="ToolbarButtonId"
              context="UICONTEXT_SolutionHasMultipleProjects" />
    </VisibilityConstraints>
    

    每个可见性项表示显示指定按钮的条件。 若要应用多个条件,必须为同一按钮创建多个条目。

  3. 生成项目并启动调试。 这将显示实验实例。

    解决方案资源管理器工具栏不包含删除线按钮。

  4. 打开包含项目的任何解决方案。

    删除线按钮显示在现有按钮右侧的工具栏上。

  5. “文件” 菜单上,单击 “关闭解决方案” 。 按钮从工具栏中消失。

    按钮的可见性由 Visual Studio 控制,直到加载 VSPackage。 加载 VSPackage 后,按钮的可见性由 VSPackage 控制。 有关详细信息,请参阅 MenuCommands 与 OleMenuCommands