繁体   English   中英

VSTO Outlook 插件功能区未正确加载

[英]VSTO Outlook Addin Ribbons not loading properly

我目前正在修复 Outlook VSTO 插件。 该项目包含 4 个功能区及其各自的功能区类型:

  • CrmAppointmentRibbon.cs -> 类型:Microsoft.Outlook.Appointment
  • CrmEmailNewRibbon.cs -> 类型:Microsoft.Outlook.Mail.Compose
  • CrmEmailReadRibbon.cs -> 类型:Microsoft.Outlook.Mail.Read
  • CrmEmailRibbon.cs -> 类型:Microsoft.Outlook.Mail.Explorer

因此,当 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM