Crear grupos reutilizables de botones

Un grupo de comandos es una colección de comandos que siempre aparecen juntos en un menú o barra de herramientas. Cualquier grupo de comandos se puede volver a usar asignando a diferentes menús primarios en la sección CommandPlacements del archivo .vsct .

Los grupos de comandos suelen contener botones, pero también pueden contener otros menús o cuadros combinados.

Para crear un grupo reutilizable de botones

  1. Cree un proyecto VSIX denominado ReusableButtons. Para obtener más información, vea Crear una extensión con un comando de menú.

  2. Cuando se abra el proyecto, agregue una plantilla de elemento de comando personalizada denominada ReutilizableCommand. En el Explorador de soluciones, haga clic con el botón derecho en el nodo del proyecto y seleccione Agregar>Nuevo elemento. En el cuadro de diálogo Agregar nuevo elemento, vaya a Visual C#>Extensibilidad y seleccione Comando personalizado. En el campo Nombre de la parte inferior de la ventana, cambie el nombre del archivo de comando a ReutilizableCommand.cs.

  3. En el archivo .vsct , vaya a la sección Símbolos y busque el elemento GuidSymbol que contiene grupos y comandos para el proyecto. Debe denominarse guidReusableCommandPackageCmdSet.

  4. Agregue un IDSymbol para cada botón que agregará al grupo, como en el ejemplo siguiente.

    <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>
    

    De forma predeterminada, la plantilla de elemento de comando crea un grupo denominado MyMenuGroup y un botón que tiene el nombre que proporcionó, junto con una entrada IDSymbol para cada uno.

  5. En la sección Grupos, cree un elemento Group que tenga los mismos atributos GUID e ID que los especificados en la sección Símbolos. También puede usar un grupo existente o usar la entrada proporcionada por la plantilla de comandos, como en el ejemplo siguiente. Este grupo aparece en el menú Herramientas

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

Para crear un grupo de botones para reutilizar

  1. Puede colocar un comando o menú en un grupo mediante el uso del grupo como elemento primario en la definición del comando o menú, o bien colocando el comando o menú en el grupo mediante la sección CommandPlacements.

    En la sección Botones, defina un botón que tenga el grupo como primario o use el botón proporcionado por la plantilla de paquete, como se muestra en el ejemplo siguiente.

    <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. Si un botón debe aparecer en más de un grupo, cree una entrada para él en la sección CommandPlacements, que debe colocarse después de la sección Comandos. Establezca los atributos GUID e ID del elemento CommandPlacement para que coincidan con los del botón que desea colocar y, a continuación, establezca el GUID y el identificador de su elemento Primario en los del grupo de destino, como se muestra en el ejemplo siguiente.

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

    Nota:

    El valor del campo Prioridad determina la posición del comando en el nuevo grupo de comandos. Las prioridades establecidas en el elemento CommandPlacement invalidan los establecidos en la definición de elemento. Los comandos que tienen valores de prioridad inferior se muestran antes de los comandos que tienen valores de prioridad más altos. Se permiten valores de prioridad duplicados, pero la posición relativa de los comandos que tienen el mismo valor de prioridad no se puede garantizar porque es posible que el orden en el que el comando devenv /setup cree la interfaz final desde el Registro no sea coherente.

Para colocar un grupo reutilizable de botones en un menú

  1. Cree una entrada en la CommandPlacements sección . Establezca el GUID y el identificador del CommandPlacement elemento en los del grupo y establezca el GUID primario y el identificador en los de la ubicación de destino.

    La sección CommandPlacements debe colocarse justo después de la sección Comandos:

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

    Un grupo de comandos se puede incluir en más de un menú. El menú primario puede ser uno que haya creado, uno proporcionado por Visual Studio (como se describe en ShellCmdDef.vsct o SharedCmdDef.vsct) o uno definido en otro VSPackage. El número de capas de elementos primarios es ilimitado siempre que el menú primario se conecte finalmente a Visual Studio o a un menú contextual que se muestra mediante UN VSPackage.

    En el ejemplo siguiente se coloca el grupo en la barra de herramientas de Explorador de soluciones, a la derecha de los otros botones.

    <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>