2013-05-30 12 views
9

Ich habe bereits ein Paket, das ich erstellt habe, und ich möchte ein Menü zum Code Window Kontextmenü hinzufügen.Warum ist nicht das Kontextmenü meines vspackage

Nach ein wenig Suche fand ich mehrere Artikel, die erklären, wie es geht. Das Problem ist, kann ich es nicht bekommen ....

Hier meine Erklärungen in der vsct Datei sind:

<Button guid="guidDALGeneratorPkgCmdSet" id="cmdidDataFlow" priority="0x0100" type="Button"> 
    <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/> 
    <CommandFlag>DynamicVisibility</CommandFlag> 
    <Strings> 
     <CommandName>cmdidDataFlow</CommandName> 
     <ButtonText>Show data flow</ButtonText> 
    </Strings> 
    </Button> 

und die Symbole:

<GuidSymbol name="guidDALGeneratorPkgCmdSet" value="{d3269a87-a721-49a5-800b-0464fbdfd313}"> 

    <IDSymbol name="MyMenuGroup" value="0x1020" /> 
    <IDSymbol name="cmdidDALGenerator" value="0x0101" /> 
    <IDSymbol name="cmdidDataFlow" value="0x0102" /> 
</GuidSymbol> 

und hier ist, wie ich füge mein Menü in meiner Package Klasse:

CommandID dataFlowCID = new CommandID(GuidList.guidDALGeneratorPkgCmdSet, (int)PkgCmdIDList.cmdidDataFlow); 
OleMenuCommand dataFlowMenu = new OleMenuCommand(showDataFlow, dataFlowCID); 
dataFlowMenu.BeforeQueryStatus += new EventHandler(dataFlowMenu_BeforeQueryStatus); 
mcs.AddCommand(dataFlowMenu); 

Was mache ich falsch hier? Ich muss etwas verpassen, weil fast jeder Probe (und SO zu diesem Thema beantworten) schlägt ein Menü auf diese Weise in einem Paket hinzuzufügen, .....

Was ich versucht habe:

  • eine Gruppe machen zuerst dann mein Menü in dieser Gruppe hinzufügen: nicht
  • Kontrolle funktionierte, wenn ich die richtige GUID (mit this trick)
  • Verwendung IDG_VS_MENU_CONTEXTMENUS statt IDM_VS_CTXT_CODEWIN verwende (nach einem Blick auf diesem Beitrag: Using vsx how do you create a sub menu with commands?)
  • das gleiche geben Eltern als ich nu, die tatsächlich auf das zweite Menü funktioniert, noch nicht angezeigt ....
  • viele erfolglose googeln über mein Problem ...

auch, wie Sie Ich verwende das BeforeQueryStatus Ereignis sehen kann, aber es nie wird gefeuert ...

+0

Sie jemals in der Lage waren, die Lösung für Ihr Problem herauszufinden. Ich stehe vor dem gleichen Problem –

+1

Es tut mir leid, nein, ich habe nicht ... Es war ein kleiner Teil eines großen Projekts, also habe ich einen anderen Weg gefunden, um das zu erreichen, was ich brauchte. Hast du probiert was @Marcel vorgeschlagen hat? – ppetrov

+0

Ja, es erstellt eine Schaltfläche im Kontextmenü, kein Menü im Kontextmenü. Es war also nicht hilfreich. Meine Anforderung ist, ein Menü im Kontextmenü zu erstellen. –

Antwort

3

Für mich funktionierte die erwähnte Konstante. Ich begann mit der Standardvorlage für ein VSPackage in Visual Studio 2013 und änderte dann die Eltern-ID in IDM_VS_CTXT_CODEWIN.

Hier ist, was ich habe jetzt:

VSCT:

<Button guid="guidCopyForReviewVSPackageCmdSet" id="cmdidCopyForReview" priority="0x0100" type="Button"> 
    <Parent guid="guidCopyForReviewVSPackageCmdSet" id="MyMenuGroup" /> 
    <Icon guid="guidImages" id="bmpPicSearch" /> 
    <Strings> 
     <ButtonText>Copy for review (foswiki)</ButtonText> 
    </Strings> 
    </Button> 

die Symbole:

<!-- This is the guid used to group the menu commands together --> 
<GuidSymbol name="guidCopyForReviewVSPackageCmdSet" value="{4ae6ff5a-6e7e-48bd-86b0-37fd9ab20629}"> 

    <IDSymbol name="MyMenuGroup" value="0x1020" /> 
    <IDSymbol name="cmdidCopyForReview" value="0x0100" /> 
</GuidSymbol> 


<GuidSymbol name="guidImages" value="{3eb1aa0b-96aa-4364-a870-ca588a9491b5}" > 
    <IDSymbol name="bmpPic1" value="1" /> 
    <IDSymbol name="bmpPic2" value="2" /> 
    <IDSymbol name="bmpPicSearch" value="3" /> 
    <IDSymbol name="bmpPicX" value="4" /> 
    <IDSymbol name="bmpPicArrows" value="5" /> 
    <IDSymbol name="bmpPicStrikethrough" value="6" /> 
</GuidSymbol> 

den Menüpunkt in der Paketklasse Hinzufügen:

  // Create the command for the menu item. 
      CommandID menuCommandID = new CommandID(GuidList.guidCopyForReviewVSPackageCmdSet, (int)PkgCmdIDList.cmdidCopyForReview); 
      MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandID); 
      mcs.AddCommand(menuItem); 

Doch dies zeigt nur das Menü in der "echten" Code-Fenster, zum Beispiel nicht in der aspx/ascx Editor.

+0

Danke für Ihre Antwort! Es muss noch etwas anderes gemacht haben, was ich falsch gemacht habe, aber ich arbeite gerade nicht an diesem Projekt, also werde ich die Methode irgendwann später überprüfen. – ppetrov

5

Ein Kontextmenü muss zu einer Gruppe hinzugefügt werden, die im Kontextmenü angezeigt wird ... Die Syntax hierfür erforderte ein paar Tage Versuch und Irrtum zu bestimmen.

enter image description here

habe ich ein neues VSPackage Erweiterungsprojekt meine VSTS dann aktualisierte Datei wie folgt über das Kontextmenü erstellen oben gezeigt:

<Commands package="guidVSPackage2Pkg"> 
    <Groups> 
     <Group guid="guidVSPackage2CmdSet" id="MyMenuGroup" priority="0x0600"> 
     <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/> 
     </Group> 

    <Group guid="guidVSPackage2CmdSet" id="SubMenuGroup" priority="0x0602"> 
     <Parent guid="guidVSPackage2CmdSet" id="SubMenu" /> 
     </Group> 
    </Groups> 

    <Menus> 
     <Menu guid="guidVSPackage2CmdSet" id="SubMenu" priority="0x0200" type="Menu"> 
     <Parent guid="guidVSPackage2CmdSet" id="MyMenuGroup" /> 
     <Strings> 
      <ButtonText>Test Context Menu</ButtonText> 
     </Strings> 
     </Menu> 
    </Menus> 

    <Buttons> 
     <Button guid="guidVSPackage2CmdSet" id="cmdidMyCommand" priority="0x0100" type="Button"> 
     <Parent guid="guidVSPackage2CmdSet" id="SubMenuGroup" /> 
     <Icon guid="guidImages" id="bmpPic1" /> 
     <Strings> 
      <ButtonText>Context Menu Button</ButtonText> 
     </Strings> 
     </Button> 
     </Buttons> 

    <Bitmaps> 
     <Bitmap guid="guidImages" href="Resources\Images.png" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows"/> 
    </Bitmaps> 
    </Commands> 
    <Symbols> 
    <!-- This is the package guid. --> 
    <GuidSymbol name="guidVSPackage2Pkg" value="{1fde2aca-f1c8-4fbc-abd1-58861d8b9520}" /> 

    <!-- This is the guid used to group the menu commands together --> 
    <GuidSymbol name="guidVSPackage2CmdSet" value="{9cfc9dda-a054-4ff2-8c85-e6d2bff04874}"> 
     <IDSymbol name="SubMenu" value="0x1001"/> 
     <IDSymbol name="SubMenuGroup" value="0x1000"/> 
     <IDSymbol name="MyMenuGroup" value="0x1020" /> 
     <IDSymbol name="cmdidMyCommand" value="0x0100" /> 
    </GuidSymbol> 

    <GuidSymbol name="guidImages" value="{b77d6bb1-566b-4ecb-a99f-9f99325ffd65}" > 
     <IDSymbol name="bmpPic1" value="1" /> 
     <IDSymbol name="bmpPic2" value="2" /> 
     <IDSymbol name="bmpPicSearch" value="3" /> 
     <IDSymbol name="bmpPicX" value="4" /> 
     <IDSymbol name="bmpPicArrows" value="5" /> 
     <IDSymbol name="bmpPicStrikethrough" value="6" /> 
    </GuidSymbol> 
    </Symbols> 
0

Für den/ASCX Editor ASPX diesen Code verwenden:

das Symbol für das Kontextmenü Hinzufügen:

<GuidSymbol name="ASPXContext" value="{D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}"> 
    <IDSymbol name="menu" value="0x0035"/> 
</GuidSymbol> 

Hinzufügen das Kontextmenü:

<Group guid="CmdSet" id="contextMenuGroup" priority="0x0100"> 
    <Parent guid="ASPXContext" id="menu" /> 
</Group> 

Mehr Infos unter: https://stackoverflow.com/a/31769170/2235860

Verwandte Themen