Erstellen wiederverwendbarer Gruppen von Schaltflächen
Eine Befehlsgruppe ist eine Sammlung von Befehlen, die immer in einem Menü oder einer Symbolleiste zusammen angezeigt werden. Jede Befehlsgruppe kann erneut verwendet werden, indem sie verschiedenen übergeordneten Menüs im Abschnitt "CommandPlacements" der VSCT-Datei zugewiesen wird.
Befehlsgruppen enthalten in der Regel Schaltflächen, können aber auch andere Menüs oder Kombinationsfelder enthalten.
So erstellen Sie eine wiederverwendbare Gruppe von Schaltflächen
Erstellen Sie ein VSIX-Projekt mit dem Namen
ReusableButtons
. Weitere Informationen finden Sie unter Erstellen einer Erweiterung mit einem Menübefehl.Wenn das Projekt geöffnet wird, fügen Sie eine benutzerdefinierte Befehlselementvorlage mit dem Namen "ReusableCommand" hinzu. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie Hinzufügen>Neues Element aus. Wechseln Sie im Dialogfeld "Neues Element hinzufügen" zu Visual C#>Erweiterbarkeit, und wählen Sie "Benutzerdefinierter Befehl" aus. Ändern Sie im Feld "Name " unten im Fenster den Befehlsdateinamen in " ReusableCommand.cs".
Wechseln Sie in der VSCT-Datei zum Abschnitt "Symbole", und suchen Sie das GuidSymbol-Element, das Gruppen und Befehle für das Projekt enthält. Er sollte "guidReusableCommandPackageCmdSet" genannt werden.
Fügen Sie ein IDSymbol für jede Schaltfläche hinzu, die Sie der Gruppe hinzufügen, wie im folgenden Beispiel gezeigt.
<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>
Standardmäßig erstellt die Befehlselementvorlage eine Gruppe mit dem Namen "MyMenuGroup " und eine Schaltfläche mit dem Namen, den Sie angegeben haben, zusammen mit einem IDSymbol-Eintrag für jedes Element.
Erstellen Sie im Abschnitt "Gruppen" ein Gruppenelement mit den gleichen GUID- und ID-Attributen wie die im Abschnitt "Symbole" angegebenen Attribute. Sie können auch eine vorhandene Gruppe verwenden oder den Eintrag verwenden, der von der Befehlsvorlage bereitgestellt wird, wie im folgenden Beispiel gezeigt. Diese Gruppe wird im Menü "Extras " angezeigt.
<Groups> <Group guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/> </Group> </Groups>
So erstellen Sie eine Gruppe von Schaltflächen für die Wiederverwendung
Sie können einen Befehl oder ein Menü in eine Gruppe einfügen, indem Sie entweder die Gruppe als übergeordnetes Element in der Definition des Befehls oder Menüs verwenden, oder indem Sie den Befehl oder das Menü in der Gruppe mithilfe des Abschnitts "CommandPlacements" platzieren.
Definieren Sie im Abschnitt "Schaltflächen" eine Schaltfläche, die ihre Gruppe als übergeordnetes Element aufweist, oder verwenden Sie die Schaltfläche, die von der Paketvorlage bereitgestellt wird, wie im folgenden Beispiel gezeigt.
<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>
Wenn eine Schaltfläche in mehreren Gruppen angezeigt werden muss, erstellen Sie einen Eintrag für sie im Abschnitt "CommandPlacements", der nach dem Abschnitt "Befehle" platziert werden muss. Legen Sie die GUID- und ID-Attribute des CommandPlacement-Elements so fest, dass sie mit denen der Schaltfläche übereinstimmen, die Sie positionieren möchten, und legen Sie dann die GUID und ID des übergeordneten Elements auf die der Zielgruppe fest, wie im folgenden Beispiel gezeigt.
<CommandPlacements> <CommandPlacement guid="guidReusableCommandPackageCmdSet" id="SecondReusableCommandId" priority="0x105"> <Parent guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" /> </CommandPlacement> </CommandPlacements>
Hinweis
Der Wert des Felds "Priorität" bestimmt die Position des Befehls in der neuen Befehlsgruppe. Im CommandPlacement-Element festgelegte Prioritäten setzen diese in der Elementdefinition außer Kraft. Befehle mit niedrigerer Priorität werden vor Befehlen mit höherer Priorität angezeigt. Doppelte Prioritätswerte sind zulässig, aber die relative Position von Befehlen mit demselben Prioritätswert kann nicht garantiert werden, da die Reihenfolge, in der der Devenv /setup-Befehl die endgültige Schnittstelle aus der Registrierung erstellt, möglicherweise nicht konsistent ist.
So platzieren Sie eine wiederverwendbare Gruppe von Schaltflächen in einem Menü
Erstellen Sie einen Eintrag im
CommandPlacements
Abschnitt. Legen Sie die GUID und DIE ID desCommandPlacement
Elements auf diejenigen Ihrer Gruppe fest, und legen Sie die übergeordnete GUID und ID auf die des Zielspeicherorts fest.Der Abschnitt "CommandPlacements" sollte direkt nach dem Abschnitt "Befehle" platziert werden:
<CommandTable> ... <Commands>... </Commands> <CommandPlacements>... </CommandPlacements> ... </CommandTable>
Eine Befehlsgruppe kann in mehreren Menüs enthalten sein. Das übergeordnete Menü kann eines sein, das Sie erstellt haben, eines, das von Visual Studio bereitgestellt wird (wie in ShellCmdDef.vsct oder SharedCmdDef.vsct beschrieben) oder eines, das in einem anderen VSPackage definiert ist. Die Anzahl der übergeordneten Ebenen ist unbegrenzt, solange das übergeordnete Menü schließlich mit Visual Studio oder mit einem Kontextmenü verbunden ist, das von einem VSPackage angezeigt wird.
Im folgenden Beispiel wird die Gruppe auf der symbolleiste Projektmappen-Explorer rechts neben den anderen Schaltflächen platziert.
<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>