2013-05-30 29 views
9

Tôi đã có một gói mà tôi đã tạo và tôi muốn thêm một trình đơn vào menu ngữ cảnh Code Window.Tại sao menu ngữ cảnh của vspackage của tôi không hiển thị

Sau một chút tìm kiếm, tôi đã tìm thấy một số bài viết giải thích cách thực hiện. Vấn đề là, tôi không thể có được nó làm việc ....

Dưới đây là tờ khai của tôi trong vsct file:

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

và những biểu tượng:

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

và đây là cách Tôi thêm thực đơn của mình vào lớp Package của mình:

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

Tôi đang làm gì sai ở đây? Tôi phải bỏ lỡ một cái gì đó bởi vì hầu hết các mẫu (và SO trả lời về đề tài này) cho thấy thêm một menu như vậy trong một gói .....

Những gì tôi đã cố gắng:

  • làm cho một nhóm đầu tiên sau đó thêm trình đơn của tôi trong nhóm đó: không làm việc
  • kiểm tra nếu tôi sử dụng GUID phải (với this trick)
  • sử dụng IDG_VS_MENU_CONTEXTMENUS thay vì IDM_VS_CTXT_CODEWIN (sau khi xem bài này: Using vsx how do you create a sub menu with commands?)
  • cho cùng cha mẹ như tôi nu mà thực sự làm việc để trình đơn thứ hai, vẫn không hiển thị ....
  • rất nhiều googling không thành công về vấn đề của tôi ...

Cũng như bạn có thể thấy tôi sử dụng sự kiện BeforeQueryStatus, nhưng nó không bao giờ bị sa thải ...

+0

Were bạn đã bao giờ có thể tìm ra giải pháp cho vấn đề của bạn. Tôi đang đối mặt với cùng một vấn đề –

+1

Tôi xin lỗi vì tôi không ... Đó là một phần nhỏ của một dự án lớn nên tôi đã tìm ra cách khác để hoàn thành những gì tôi cần. Bạn đã thử những gì @Marcel đề xuất? – ppetrov

+0

Có, Nó tạo ra một Nút trên ngữ cảnh Menu không phải là Menu trên Menu ngữ cảnh. Vì vậy, nó không hữu ích. Yêu cầu của tôi là tạo một Menu trên menu ngữ cảnh. –

Trả lời

3

Đối với tôi, hằng số được đề cập đã hoạt động. Tôi bắt đầu với mẫu tiêu chuẩn cho VSPackage trong Visual Studio 2013, sau đó thay đổi id Gốc thành IDM_VS_CTXT_CODEWIN.

Dưới đây là những gì tôi có bây giờ:

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> 

những biểu tượng:

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

Thêm vào mục menu trong lớp gói:

  // 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); 

Tuy nhiên, điều này chỉ cho thấy menu trong "thực" cửa sổ mã, không trong trình soạn thảo aspx/ascx ví dụ.

+0

Cảm ơn câu trả lời của bạn! Phải có một cái gì đó khác tôi đã làm sai sau đó, tuy nhiên tôi không làm việc trên dự án này ngay bây giờ, vì vậy tôi sẽ kiểm tra các phương pháp đôi khi sau đó. – ppetrov

5

Một menu ngữ cảnh phải được thêm vào một nhóm trên menu ngữ cảnh để hiển thị nó ... Cú pháp cho điều này đã cho tôi một vài ngày dùng thử và lỗi để xác định.

enter image description here

Tôi tạo ra một dự án mở rộng VSPackage mới cập nhật sau đó nộp VSTS của tôi như sau để tạo ra các menu ngữ cảnh hiển thị ở trên:

<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

Đối với các biên tập viên ASPX/ascx sử dụng mã này:

Thêm Biểu tượng cho trình đơn ngữ cảnh:

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

Thêm menu ngữ cảnh:

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

Thông tin thêm tại địa chỉ: https://stackoverflow.com/a/31769170/2235860

Các vấn đề liên quan