首页 > 解决方案 > 如何重新调整上下文菜单的用途以进行回复?

问题描述

我有一个 Explorer.xml,我发现右键单击回复控件位于 idMso“ContextMenuMailItem”中

<contextMenu idMso="ContextMenuMailItem">
     <button idMso="Reply" onAction="Reply_RightClick"/>
</contextMenu>

但是,当我尝试为其设置 onAction 时,不会调用该函数。

public void Reply_RightClick(Office.IRibbonControl control)
{
      //do something
}

我知道 .cs 文件设置正确,因为我有自定义按钮可以正确触发其各自的功能,而且我知道回复按钮是我想要的,因为当我将可见/启用切换为 false 时,它​​会被适当地隐藏/禁用. 我怎样才能拦截这个回复?请帮忙!

标签: c#outlook

解决方案


如果它证明对其他人有帮助,我设法找到了解决方法!

首先,隐藏上下文菜单上的原始回复按钮。

<contextMenu idMso="ContextMenuMailItem">
     <button idMso="Reply" visible="false"/>
</contextMenu>

然后,在您隐藏回复按钮的同一位置的上下文菜单中添加一个自定义回复按钮,并带有回复图标

<button id="Custom_Reply" onAction="reply_click" label="Reply" insertBeforeMso="MarkAsRead" imageMso="Reply"/>
<menuSeparator id="Separator" insertBeforeMso="MarkAsRead/>

之后,您将能够对回复按钮执行所需的操作

public void reply_click(Office.IRibbonControl control)
{
     if(control.Context is Outlook.Selection)
     {
          Outlook.Selection item = control.Context as Outlook.Selection);
          if(item[1] is Outlook.MailItem mailItem)
          {
               mailItem = item[1] as Outlook.MailItem;

               //do stuff to your mailitem

               //then do a .reply and display the repurposed mailitem
               Outlook.MailItem replyMail = mailItem.Reply();
               replyMail.Display();

               //don't forget to release your comobjects!
               if(replyMail != null) Marshal.ReleaseComObject(replyMail);
               if(mailItem != null) Marshal.ReleaseComObject(mailItem);
          }
     }
}

推荐阅读