【问题标题】:Adding a separator to menu in Visual Studio extension在 Visual Studio 扩展中向菜单添加分隔符
【发布时间】:2013-01-25 05:07:21
【问题描述】:

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

我所说的分隔符是跨越菜单/上下文菜单以分隔项目的行。

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

我真的找不到太多关于这方面的信息,所以我希望有人能帮助我。

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

【问题讨论】:

    标签: c# visual-studio-2010 visual-studio-addins visual-studio-extensions


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 酷。我找了一个小时。有效!谢谢。
    【解决方案2】:

    从这里: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

    【讨论】:

    • 感谢您的帮助,这实际上是一个有点不同的加载项。它在 C# 中有一个特定的连接文件,我将在其中创建菜单项/插入它,但扩展使用 XML 来创建它们的菜单项。不过还是谢谢。
    【解决方案3】:

    在 .vcts 中,Commands 部分负责该功能。为了动态地用菜单做某事,你可以实现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;
        }
    

    【讨论】:

    • 好的,但我究竟该如何添加分隔符?
    • 这是一个扩展而不是加载项?
    • @user1632018 看了你的回答,好像只对加载项有效。
    【解决方案4】:

    不确定您是如何创建菜单的,但如果您使用MenuItem 类,您可以将"-" 传递给其构造函数以创建分隔符。

    MenuItem separator = new MenuItem("-");
    

    【讨论】:

    • 谢谢,但菜单项实际上是通过 VSCT 文件中的 XML 创建的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多