首页 > 解决方案 > 在运行时添加到功能区一次有效

问题描述

您好我正在尝试将当前打开的联系人电话号码添加到功能区。

我创建了功能区并添加了一个包含电话号码的拆分按钮。

在“ThisAddin”中,当当前资源管理器更改时,它会触发一个事件,该事件只是获取项目类型。如果它是一个联系人,它会调用

//ThisAddin.cs on explorer change event - if is contact run:    

Globals.Ribbons.CallContact.AddButton(contactItem.BusinessTelephoneNumber);  



//Ribbon class
internal void AddButton(string name)
    {            
        if (name != null && name.Count() > 2)
        {
            RibbonButton item = Globals.Factory.GetRibbonFactory().CreateRibbonButton();
            item.Label = name;
            item.ShowLabel = true;
            this.newSplit.Items.Add(item);
        }
    }

这工作一次,第一次打开联系人电话号码显示在功能区中。打开另一个联系人窗口将导致添加功能区项目,但它们是空白和空的。

我只是尝试将联系人电话号码添加到功能区并将它们留在那里,而用户可以打开另一个联系人并且相同的代码运行将电话号码添加到功能区。

添加项目后,我不需要保留对项目的引用。感谢您的帮助。我觉得这里需要一个调用。

标签: c#vstooutlook-addin

解决方案


您必须告诉 Outlook 刷新功能区。有关示例代码,请参阅https://docs.microsoft.com/en-us/visualstudio/vsto/walkthrough-updating-the-controls-on-a-ribbon-at-run-time?view=vs-2019

您需要指定回调来检索按钮的标题,而不是在功能区的 XML 中硬编码。

请注意,由于您可以打开多个检查器,因此您必须提供特定于在其自己的检查器中打开的每个项目的数据。


推荐阅读