2012-05-27 115 views
4

我有一個Outlook 2007/2010加載項,我已成功將上下文菜單按鈕添加到資源管理器。按鈕本身顯示正確並且工作正常,但是我無法將它放在上下文菜單上的內置控件上,它總是添加到底部。我使用VSTO 3.0爲Outlook 2003加載項創建了相同的按鈕,並且相同的代碼會創建一個位於「打開」按鈕上方的上下文菜單頂部的按鈕。如何定位Outlook 2007/2010 VSTO上下文菜單按鈕?

我的代碼如下

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的參數()方法無濟於事玩耍。我懷疑問題是在將其他內置控件添加到上下文菜單之前正在觸發ItemContextMenuDisplay事件,而在Explorer.CommandBars觸發的方法中創建Outlook 2003外接程序按鈕。 OnUpdate事件不存在於VSTO 4.0 Explorer對象中。

是否可以在Outlook 07/10的VSTO 4.0中添加不在上下文菜單底部的按鈕?

回答

3

在Outlook 2003和2007中,上下文菜單是基於CommandBar的,並使用上面提供的代碼創建。在Outlook 2010中,上下文菜單現在是基於功能區的,並且通常使用XML進行聲明。

Customizing Context Menus in Office 2010

之前到Microsoft Office 2010,以自定義是Microsoft Office Fluent Ribbon用戶界面(UI)上下文(右鍵)菜單的唯一方法是通過使用的CommandBars解決方案。在Office 2010中,您可以自定義內置上下文菜單,就像功能區UI的其他組件一樣。這種基於XML的上下文菜單可擴展性模型基於熟悉的Ribbon可擴展性模型。這意味着您可以使用目前用於自定義功能區UI的相同XML標記和回調。此外,通過功能區UI可擴展性啓用上下文菜單自定義不會「破壞」以前編寫的命令欄解決方案。

Outlook 2010支持向後兼容基於CommandBar的控件,但有一些注意事項;無法定位控件可能是其中之一。

我的建議是讓你的加載項檢測運行的Outlook版本是2003/2007還是2010,如果是後者,則創建基於Ribbon的控件而不是基於CommandBar的控件。您將需要調查如何相應地調整您的代碼;例如,可以通過在<button>元素中聲明insertBeforeMso屬性來執行定位。

P.S.我鼓勵您考慮切換到商用第三方產品Add-in Express for Microsoft Office and .NET以擴展Office應用程序的UI;它極大地簡化了VSTO的過程。您仍然需要創建一個單獨的基於CommandBar的ADXContextMenuAdxRibbonContextMenu(基於色帶),但該過程幾乎可以完全使用直觀的視覺設計器完成。

+1

嗨道格拉斯感謝您的回答我肯定會調查我的Outlook 2010加載項代碼的基於功能區的控件。我已經閱讀了很多關於Add-In Express的內容,它看起來像一個很棒的產品,但對於我相對簡單的(或者我認爲是!)加載項來說可能是過度殺傷性的。 –

+0

@alexw:這可能是矯枉過正的,但單一開發者許可只需300-350美元左右(並且允許免費發佈商業產品),所以即使它爲您節省了幾天的工作也值得考慮。我更喜歡VSTO的另一個主要原因是,它允許您在Outlook 2003上使用.NET 4(VSTO不支持)。就個人而言,我只使用VSTO進行原型或個人項目。 – Douglas

相關問題