簡體   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