4

私は最初の Visual Studio 拡張機能を構築していますが、終わりに近づいているので、もう少し見栄えを良くしようとしています。トップメニューに独自の見出しがあり、その中に項目があります。メニューにセパレーターを追加してすっきりさせたいのですが、その方法がわかりません。

私が話しているセパレーターは、メニュー/コンテキストメニューを横切って項目を区切る線です。

vsctファイルのxmlに追加する必要があると思いますが、アドインがC#にある場合に備えて。

これについてはあまり見つけられないので、誰かが私を助けてくれることを願っています。

編集:私は自分の問題を理解したようです。どこでも見回した後、いくつかのメニュー項目を XML vsct ファイルの別のグループに入れてみることにしました..そして出来上がり! 私は今、クールなセパレーターを持っています。したがって、答えは、別のグループに自動的に追加され、コードでは実行できないということです(またはそう思います)。拡張機能は、C# や VB を使用してメニュー項目を追加するのではなく、アドインのみを使用することに注意してください。拡張機能は XML を使用します。

4

4 に答える 4

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 では、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;
    }
于 2013-01-25T06:36:43.020 に答える
-3

メニューの作成方法はわかりませんが、MenuItemクラスを使用している場合は"-"、そのコンストラクターに渡してセパレーターを作成できます。

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