visual studio插件開發-Menu( 三 )

  1. 在Menus節點下新建一個menu:MyMenu,以上面的MyMenuGroup1位parent
<Menus>  <Menu guid ="guidMenuDemoVSIXPackageCmdSet" id="MyMenu" priority="0x3110" type="Menu">    <Parent guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup1"/>    <Strings>      <ButtonText>New</ButtonText>      <CommandName>New</CommandName>    </Strings>  </Menu></Menus>
  1. 再創建一個group:MyMenuGroup2 以上面的MyMenu為parent
<Group guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup2" priority="0x0600">    <Parent guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenu"/></Group>
  1. 創建Button以MyMenuGroup2為parent
<Buttons>  <Button guid="guidMenuDemoVSIXPackageCmdSet" id="TestCommandId" priority="0x0100" type="Button">    <Parent guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup2" />    <Icon guid="guidImages" id="bmpPic1" />    <Strings>      <ButtonText>Invoke TestCommand</ButtonText>    </Strings>  </Button></Buttons>完整定義:
visual studio插件開發-Menu

文章插圖
如果想要同時顯示在多個地方咋整比如 我既要顯示在工程右鍵菜單里面,又要顯示在普通文件的右鍵菜單,又要顯示在代碼右鍵菜單
這里就用到上面提到的 CommandPlacements
還是以上面的例子,這時候第一步的group1:MyMenuGroup2的parent就不能填了
而是要添加CommandPlacements  , id要填 MyMenuGroup2,Parent填具體ID
<CommandPlacements>    <CommandPlacement guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup1" priority="0x0000">      <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE"/>    </CommandPlacement>    <CommandPlacement guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup1" priority="0x0000">      <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />    </CommandPlacement>    <CommandPlacement guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup1" priority="0x0000">      <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN" />    </CommandPlacement></CommandPlacements>
visual studio插件開發-Menu

文章插圖
image
效果如下:

visual studio插件開發-Menu

文章插圖
image
怎樣動態展示菜單比如 ,非json文件的就不展示
visual studio插件開發-Menu

文章插圖
是json文件的才展示
visual studio插件開發-Menu

文章插圖
在Button的增加 DynamicVisibility
 <Button guid="guidMenuDemoVSIXPackageCmdSet" id="TestCommandId" priority="0x0100" type="Button">    <Parent guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup2" />    <!--這個 -->    <CommandFlag>DynamicVisibility</CommandFlag>    <Icon guid="guidImages" id="bmpPic1" />    <Strings>      <ButtonText>Invoke TestCommand</ButtonText>    </Strings></Button>讓VsPackage隨著項目啟動后就立即加載,不然動態判斷邏輯無法提前指定
visual studio插件開發-Menu

文章插圖
修改Command的初始化方法,拿到DTE,很多功能點需要用到它里面的接口,比如拿到當前選擇的item

visual studio插件開發-Menu

文章插圖
image
然后再初始化Menu的時候指定BeforeQueryStatus的邏輯為后綴為json才展示
visual studio插件開發-Menu

文章插圖
總結我覺得對于visual studio中如何用插件來擴展menu 大概了解上面幾點就差不多了 , 希望能幫助到你

推薦閱讀