4

我正在构建我的第一个 Visual Studio 扩展,现在我已经接近尾声,我只是想让它看起来更好一点。我在顶部菜单中有自己的标题,其中包含项目。我想在菜单中添加一个分隔符以使其更整洁,但不知道该怎么做。

我正在谈论的分隔符是跨越菜单/上下文菜单以分隔项目的行。

我猜它必须添加到 vsct 文件中的 xml 中,但如果它是相关的,则加载项在 C# 中。

我真的找不到太多关于这个的东西,所以我希望有人能帮助我。

编辑:我似乎已经弄清楚了我的问题。环顾四周后,我想到了尝试将几个菜单项放入 XML vsct 文件中的不同组中。瞧!我现在有一个很酷的分离器。所以答案是它会自动添加到单独的组中,并且不能通过代码完成(或者我认为)。请记住,扩展不使用 C# 或 VB 来添加菜单项,只有插件可以。扩展使用 XML。

4

4 回答 4

4

分隔符是 .vsct 文件中定义的命令组的视觉分隔。

命令组是属于一起的命令的逻辑容器。这种分组也可以用于视觉效果。

如果您在一个菜单中放置了多个命令组,则会创建一个分隔符以直观地强调命令组的分隔。

要了解有关 .vsct 文件的更多信息,请查看:http ://dotneteers.net/blogs/divedeeper/archive/2008/03/02/LearnVSXNowPart14.aspx

于 2015-09-25T05:09:01.333 回答
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

于 2013-01-25T05:33:34.240 回答
0

在 .vcts 中,Commandssection 负责该功能。为了动态地用菜单做某事,你可以实现界面并在方法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;
    }
于 2013-01-25T06:36:43.020 回答
-3

Not sure how you're creating the menu, but if you're using the MenuItem class, you can pass "-" to its constructor to create a separator.

MenuItem separator = new MenuItem("-");
于 2013-01-25T05:40:25.430 回答