4

Outlook 2007/2010アドインがあり、エクスプローラーにコンテキストメニューボタンを正常に追加しました。ボタン自体は正しく表示され、正常に機能していますが、コンテキストメニューの組み込みコントロールの上に配置できません。常に下部に追加されます。Outlook2003アドイン用にVSTO3.0を使用して同じボタンを作成しました。同じコードを使用すると、コンテキストメニューの上部の[開く]ボタンの上にボタンが作成されます。

私のコードは以下の通りです

 void Application_ItemContextMenuDisplay(CommandBar CommandBar, Selection Selection)
    {
        if (Selection.Count != 1) return;

        CommandBarControl rootButton = CommandBar.Controls.Add(MsoControlType.msoControlButton, Type.Missing, "Create Heat Call", 1, Type.Missing);

        CommandBarButton button = (CommandBarButton)rootButton;

        button.BeginGroup = true;
        button.Tag = "CreateHeatCall";
        button.Caption = "Create Heat Call";
        button.Style = MsoButtonStyle.msoButtonIconAndCaption;
        button.Visible = true;

        button.Picture = GetImage();
        button.Mask = GetImageMask();

        selection = Selection;

        ((CommandBarButton)rootButton).Click += new _CommandBarButtonEvents_ClickEventHandler(ThisAddIn_Click);

    }

CommandBar.Controls.Add()メソッドの「Before」パラメーターを試してみましたが、役に立ちませんでした。問題は、他の組み込みコントロールがコンテキストメニューに追加される前にItemContextMenuDisplayイベントが発生しているのに対し、Outlook2003アドインボタンはExplorer.CommandBarsによって発生するメソッドで作成されていることです。 VSTO4.0Explorerオブジェクトに存在しないOnUpdateイベント。

VSTO 4.0 for Outlook 07/10のコンテキストメニューの下部にないボタンを追加することは可能ですか?

4

1 に答える 1

3

Outlook 2003および2007では、コンテキストメニューはCommandBarベースであり、上記で提供したようなコードを使用して作成されていました。Outlook 2010では、コンテキストメニューがリボンベースになり、通常はXMLを使用して宣言されます。

Office 2010のコンテキストメニューのカスタマイズから:

Microsoft Office 2010より前は、Microsoft Office Fluentリボンユーザーインターフェイス(UI)のコンテキスト(右クリック)メニューをカスタマイズする唯一の方法は、CommandBarsソリューションを使用することでした。Office 2010では、リボンUIの他のコンポーネントと同じように、組み込みのコンテキストメニューをカスタマイズできます。このXMLベースのコンテキストメニュー拡張性モデルは、おなじみのリボン拡張性モデルに基づいています。これは、リボンUIのカスタマイズに現在使用しているものと同じXMLマークアップとコールバックを使用できることを意味します。さらに、リボンUIの拡張性を介してコンテキストメニューのカスタマイズを有効にしても、以前に作成されたコマンドバーソリューションが「壊れる」ことはありません。

Outlook 2010は、CommandBarベースのコントロールの下位互換性をサポートしていますが、いくつかの注意点があります。コントロールを配置できないことは、おそらくそれらの1つです。

私の提案は、実行中のOutlookのバージョンが2003/2007か2010かをアドインで検出し、後者の場合は、CommandBarベースのコントロールではなくリボンベースのコントロールを作成することです。それに応じてコードを適応させる方法を調査する必要があります。たとえば、要素insertBeforeMsoで属性を宣言することにより、ポジショニングを実行できます。<button>

PS OfficeアプリケーションのUIを拡張するために、MicrosoftOfficeおよび.NET用の商用サードパーティ製品Add-inExpressへの切り替えを検討することをお勧めします。VSTOよりも大幅にプロセスが簡素化されます。ADXContextMenuそれでも、 (CommandBarベース)と(Ribbonベース)を別々に作成する必要がありますAdxRibbonContextMenuが、プロセスはほぼ完全に直感的なビジュアルデザイナーを使用して実行できます。

于 2012-05-27T09:11:19.093 に答える