[英]VSTO Outlook Addin Ribbons not loading properly
我目前正在修复 Outlook VSTO 插件。 该项目包含 4 个功能区及其各自的功能区类型:
因此,当 Outlook 打开时,调用方法 ThisAddIn_Startup 来初始化插件,我得到的功能区集合如下:
ThisRibbonCollection ribbonCollection = Globals.Ribbons[Globals.ThisAddIn.Application.ActiveInspector()];
因此,ribbonCollection 包含 4 个功能区,但ribbonCollection 的CrmEmailRibbon 变量的class 类型不匹配。 当我做
ribbonCollection.CrmEmailRibbon
它返回 CrmEmailReadRibbon 而不是 CrmEmailRibbon。 所以 CrmEmailReadRibbon 被返回两次。 这是从这两个调用返回的相同功能区:
ribbonCollection.CrmEmailRibbon
ribbonCollection.CrmEmailReadRibbon
第一次调用应返回其关联的功能区引用:CrmEmailRibbon。 因此,我无法访问 CrmEmailRibbon 的组和按钮......有人遇到过这种行为吗?
通过运行以下代码:
ThisRibbonCollection ribbonCollection = Globals.Ribbons[Globals.ThisAddIn.Application.ActiveInspector()];
您将获得检查器 window 的功能区实例,它可以是以下之一:
CrmAppointmentRibbon.cs -> Type: Microsoft.Outlook.Appointment
CrmEmailNewRibbon.cs -> Type: Microsoft.Outlook.Mail.Compose
CrmEmailReadRibbon.cs -> Type: Microsoft.Outlook.Mail.Read
要获取功能区实例,您需要传递一个活动的资源管理器实例:
ThisRibbonCollection ribbonCollection = Globals.Ribbons[Globals.ThisAddIn.Application.ActiveExplorer()];
对于以下实例:
CrmEmailRibbon.cs -> Type: Microsoft.Outlook.Mail.Explorer
根据上下文,您将获得适当的功能区实例。
但我建议使用功能区回调而不是使用 VSTO object model 来处理功能区 UI(又名功能区 UI)。 此外,VSTO 并未提供 Fluent UI 的所有功能。 有时您必须使用功能区设计器创建基本 UI,然后将其导出到功能区 XML 文件,您可以在其中开始使用回调。
正如我的同事所说,功能区 UI 从一开始就是 static 的东西。 唯一可能的动态是回调和菜单。 因此,您可以比较两种方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.