将 outlook Item 传递给 C# 中 Ribbon xml 的 onAction 属性中提到的函数

Pass outlook Item to function mentioned in onAction attribute of Ribbon xml in C#

我创建了一个简单的 VSTO outlook 加载项,其目的是在单击回复按钮时自动设置邮件主题。我在 MailItem 上添加了事件处理程序 Outlook.ItemEvents_10_ReplyEventHandler。因此,无论何时单击回复按钮,都会触发回调函数,假设 func() 来自 ThisAddIn.cs class。这么多效果很好。

然后,我使用功能区在上下文菜单中生成了一个按钮。目前,当我点击那个按钮时,它会显示一个 MessageBox 表示这个控件的 onAction 正在工作并且显示 MessageBox 的函数写在 MyRibbon.cs class 中。 我的 Ribbon.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
  </ribbon>
  <contextMenus>
      <contextMenus> 
        <contextMenu idMso="ContextMenuMailItem"> 
         <button id="AddSubject" label="Add a Subject" onAction= "AddSubject" /> 
        </contextMenu> 
  <contextMenus>    
</customUI>

AddSubject 中的函数定义 MyRibbon.cs class

        public void AddSubject(Office.IRibbonControl control)
        {
            if(control.Context is Outlook.Selection)
            {
                Console.WriteLine("Selection");
                Outlook.MailItem mi = control.Context as Outlook.MailItem; //mi is null
                Console.WriteLine("Go the mail");
                Globals.ThisAddIn.CreateSubjectLine(mi);

            }          
        }

在 ThisAddIn.cs class 中创建 Ribbon 对象的函数:

        protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
        {
            return new Ribbon1();
        }

现在,我不知道如何调用 ThisAddIn.cs classfunc() 并从 AddSubject 回调函数中传递 object(在本例中为 MailItem)在 MyRibbon.cs class?
中定义 我试过参考这个 (https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/ee692172(v=office.14)?redirectedfrom=MSDN) 文件,但我不能参考其中提到的项目。

我什至不确定我是否正确编写了 ribbon.xml 文件,它是否与我希望实现的目标一致。任何概念证明或参考资料也会有很大帮助。

IRibbonControl 对象将作为参数传递给您的事件处理程序。将 IRibbonControl.Context 转换为 Inspector(然后使用 Inspector.CurrentItem)或转换为 Explorer(使用 Explorer.Selection 集合或 Explorer.InlineResponse