Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Visual Studio扩展中向菜单添加分隔符_C#_Visual Studio 2010_Visual Studio Addins_Visual Studio Extensions - Fatal编程技术网

C# 在Visual Studio扩展中向菜单添加分隔符

C# 在Visual Studio扩展中向菜单添加分隔符,c#,visual-studio-2010,visual-studio-addins,visual-studio-extensions,C#,Visual Studio 2010,Visual Studio Addins,Visual Studio Extensions,我正在构建我的第一个VisualStudio扩展,现在我已经接近尾声了,我只是想让它看起来更好一点。我在顶部菜单中有我自己的标题,其中有一些项目。我想在菜单中添加一个分隔符,使其更整洁,但不知道如何操作 我所说的分隔符是穿过菜单/上下文菜单以分隔项目的行 我认为它必须被添加到vsct文件中的xml中,但如果它是相关的,则该加载项位于C#中 在这方面我真的找不到什么,所以我希望有人能帮助我 编辑:我似乎已经解决了我的问题。环顾了所有地方后,我想到了在XML vsct文件中将两个菜单项放入另一个组中

我正在构建我的第一个VisualStudio扩展,现在我已经接近尾声了,我只是想让它看起来更好一点。我在顶部菜单中有我自己的标题,其中有一些项目。我想在菜单中添加一个分隔符,使其更整洁,但不知道如何操作

我所说的分隔符是穿过菜单/上下文菜单以分隔项目的行

我认为它必须被添加到vsct文件中的xml中,但如果它是相关的,则该加载项位于C#中

在这方面我真的找不到什么,所以我希望有人能帮助我

编辑:我似乎已经解决了我的问题。环顾了所有地方后,我想到了在XML vsct文件中将两个菜单项放入另一个组中的想法..瞧!我现在有一个很酷的分离器。所以答案是,它会自动添加到单独的组中,而不能通过代码来完成(或者我认为是这样)。记住,扩展不使用C#或VB来添加菜单项,只有外接程序可以。扩展使用XML。

从这里开始:

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

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

这看起来也很有用:

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

MenuItem separator = new MenuItem("-");

在.vcts中,
命令
部分负责该功能。为了动态使用菜单执行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;
    }

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

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

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


要了解有关.vsct文件的更多信息,请查看:

好的,但如何添加分隔符?这是用于扩展名而不是用于与外接程序?@user1632018查看您的答案,它似乎仅适用于外接程序。感谢您的帮助,这实际上是用于与此稍有不同的外接程序。它在C#中有一个特定的连接文件,我将在其中创建菜单项/nsert,但扩展使用XML创建菜单项。不过还是谢谢。谢谢,但是菜单项实际上是通过VSCT file.Cool中的XML创建的。我找了一个小时。成功了!谢谢