使用VSTO将上下文菜单项添加到收件箱Outlook.MailItems

时间:2016-05-17 14:09:10

标签: c# .net visual-studio-2013 outlook vsto

我使用VS2013为Outlook 2013创建Outlook插件。具体来说,我希望添加一个" Call"右键单击收件箱中的MailItem时显示的上下文菜单中的项目。

下面是我开始获取当前所选MailItem的代码。我可以通过抛出一些调试MessageBox来验证我是否正确获得了一个句柄。但是,我似乎无法访问MailItem上下文菜单(我明显想要做cm.Items.Add(callMenuItem);之类的操作):

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
   //Handle the event when the selected inbox MailItem changes:
   Globals.ThisAddIn.Application.ActiveExplorer().SelectionChange += ThisAddIn_SelectionChange;
}

private void ThisAddIn_SelectionChange()
{
   //Get a handle to the current inbox MailItem:
   Outlook.MailItem mailItem = ((Outlook.MailItem)Globals.ThisAddIn.Application.ActiveExplorer().Selection[1]);

   //Verify I've got the right one by showing a popup with the subject line:
   System.Windows.Forms.MessageBox.Show(mailItem.Subject);

   //Now I want to add an item to the context menu:
   // ??? Cannot find anything anywhere that shows
   //     shows how to add items to this contextmenu.
}

无论如何,我可以得到这一点,这将是一个很好的开始。最后,我还要将此呼叫按钮添加到Outlook主页功能区("回复"旁边)和邮件弹出消息功能区(""旁边&## 34)。在任何这些地方添加此UI元素的任何细节都是我正在寻找的。

1 个答案:

答案 0 :(得分:0)

如果需要在Outlook中自定义上下文菜单,则无需处理SelectionChange事件。相反,您需要使用Fluent UI。有关详细信息,请参阅Customizing Context Menus in Office 2010

您可以在以下系列文章中阅读有关Fluent UI(aka Ribbon UI)的更多信息:

我注意到以下代码行:

//Handle the event when the selected inbox MailItem changes:
Globals.ThisAddIn.Application.ActiveExplorer().SelectionChange += 

您需要在全局范围(类级别)声明源对象以始终触发事件。或者垃圾回收器会刷源对象(Explorer)。