我使用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元素的任何细节都是我正在寻找的。 p>
答案 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)。