我已经创建了一个包,我想在Code Window
上下文菜单中添加一个菜单。
经过一番搜索,我找到了几篇解释如何做的文章。问题是,我无法让它发挥作用......
以下是vsct
文件中的声明:
<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>
和符号:
<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>
以下是我在Package
课程中添加菜单的方法:
CommandID dataFlowCID = new CommandID(GuidList.guidDALGeneratorPkgCmdSet, (int)PkgCmdIDList.cmdidDataFlow);
OleMenuCommand dataFlowMenu = new OleMenuCommand(showDataFlow, dataFlowCID);
dataFlowMenu.BeforeQueryStatus += new EventHandler(dataFlowMenu_BeforeQueryStatus);
mcs.AddCommand(dataFlowMenu);
我在这里做错了什么?我必须错过一些东西,因为几乎每个样本(以及关于这个主题的SO答案)都建议在包装中添加一个菜单......
我尝试过:
IDG_VS_MENU_CONTEXTMENUS
代替IDM_VS_CTXT_CODEWIN
(查看此帖后:Using vsx how do you create a sub menu with commands?)另外,你可以看到我使用BeforeQueryStatus
事件,但它永远不会被解雇......
答案 0 :(得分:5)
必须将上下文菜单添加到上下文菜单中的组才能显示...这个语法花了我几天的试验和错误来确定。
我创建了一个新的VSPackage扩展项目,然后按如下方式更新了我的VSTS文件,以创建上面显示的上下文菜单:
<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>
答案 1 :(得分:3)
对我来说,提到的常数是有效的。 我开始使用Visual Studio 2013中的VSPackage标准模板,然后将Parent ID更改为IDM_VS_CTXT_CODEWIN。
这就是我现在所拥有的:
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>
符号:
<!-- 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>
在包类中添加菜单项:
// 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 );
但是,这仅显示“真实”代码窗口中的菜单,而不是例如aspx / ascx编辑器中的菜单。
答案 2 :(得分:0)
对于ASPX / ASCX编辑器,请使用以下代码:
为上下文菜单添加符号:
<GuidSymbol name="ASPXContext" value="{D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}">
<IDSymbol name="menu" value="0x0035"/>
</GuidSymbol>
添加上下文菜单:
<Group guid="CmdSet" id="contextMenuGroup" priority="0x0100">
<Parent guid="ASPXContext" id="menu" />
</Group>
答案 3 :(得分:0)
就我而言,问题是我手动添加了带有110/112/400条目的资源文件。当您让向导生成所有内容时,.resx文件会以不同的方式添加到.csproj:
<EmbeddedResource Include="Properties\Resources.resx">
<!-- Without this line the menu will not appear: -->
<MergeWithCTO>true</MergeWithCTO>
</EmbeddedResource>