3

我正在构建我的第一个Visual Studio扩展,现在我已接近尾声,只是试图让它看起来更好一点。在顶部菜单中有我自己的标题,里面有项目。我想在菜单中添加一个分隔符以使其更加整洁,但无法弄清楚如何执行此操作。在Visual Studio扩展中向菜单添加分隔符

我正在谈论的分隔符是贯穿菜单/上下文菜单以分离项目的线。

我打算将它添加到vsct文件中的xml中,但事实上它与C#中的加载项相关。

我根本找不到这个,所以我希望有人能帮助我。

编辑:我似乎已经想通了我的问题。在环顾四周后,我想出了一个办法,试图将一些菜单项放到XML vsct文件中的另一个组中......以及VOILA!我现在有一个很酷的分隔符。所以答案是它会自动添加到单独的组中,并且不能通过代码完成(或者我认为)。记住扩展不使用C#或VB来添加菜单项,只有加载项可以。扩展使用XML。

回答

0

从这里:http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/f26acf64-0ee6-4947-84e4-a7a0ded9d636

看起来是这样的代码,但老实说,我不知道。

'Me.AddSeparatorLine(generateCodeCommandBarPopup, 3) 
CType(cmnd_GenerateListDetailFormCode.AddControl(generateCodeCommandBarPopup.CommandBar, 3),CommandBarButton).BeginGroup = True 

这也看起来像它可能是有用的:http://www.mztools.com/articles/2005/MZ2005003.aspx

+0

感谢您的帮助,这实际上是一个加载项,其中有一点不同。它在C#中有一个特定的连接文件,我将创建菜单项/插入,但扩展名使用XML来创建他们的菜单项。不过谢谢。 – user1632018

-2

不知道你如何创建菜单,但如果你使用MenuItem类,你可以通过"-"它的构造函数来创建一个分隔符。

MenuItem separator = new MenuItem("-"); 
+0

谢谢,但菜单项实际上是通过VSCT文件中的XML创建的。 – user1632018

0

在.vcts中,Commands部分负责该功能。上为了做到与菜单STHM动态你可以实现IVsShellPropertyEvents接口和做你的逻辑在OnShellPropertyChange方法

public int OnShellPropertyChange(int propid, object propValue) 
    { 
     // --- We handle the event if zombie state changesfrom true to false 
     if ((int)__VSSPROPID.VSSPROPID_Zombie == propid) 
     { 
      if ((bool)propValue == false) 
      { 
       // --- Show the commandbar 
       EnvDTE80.DTE2 dte = GetService(typeof(DTE)) as DTE2; 
       CommandBar cb = ((dte.CommandBars as CommandBars)["YourCommandBar"] as CommandBar); 

       foreach (CommandBarControl cbc in cb.Controls) 
       { 
        if (cbc.Caption == "YourCaption") 
        { 
         CommandBarButton btn = (CommandBarButton)cbc; 
         btn.BeginGroup = true; // HERE WE ADD NEW GROUP - means add separator 
        } 
       } 
      } 

      // --- Unsubscribe from events 

      var shellService = GetService(typeof(SVsShell)) as IVsShell; 
      if (shellService != null) 
      { 
       ErrorHandler.ThrowOnFailure(shellService.UnadviseShellPropertyChanges(_EventSinkCookie)); 
      } 

      _EventSinkCookie = 0; 
     } 

     return VSConstants.S_OK; 
    } 
+0

好的,但我究竟如何添加分隔符? – user1632018

+0

这是用于扩展而不是和加载项? – user1632018

+0

@ user1632018看看你的答案,它似乎只适用于加载项。 – nikita

相关问题