添加到 Excel 的 VSTO 的功能区属于 RibbonBase 类型,而不是 IRibbonExtensibility

The ribbon added to a VSTO for Excel is of type RibbonBase and not IRibbonExtensibility

我正在构建一个 VSTO 应用程序 (WinForms) 并按照以下位置的说明进行操作:

https://docs.microsoft.com/en-us/visualstudio/vsto/walkthrough-creating-a-custom-tab-by-using-ribbon-xml?view=vs-2019

步骤如下:

  1. 在“项目”菜单上,单击“添加新项”。
  2. 在“添加新项”对话框中,select 功能区 (XML)。
  3. 将新功能区的名称更改为MyRibbon,然后单击添加。 MyRibbon.cs 或 MyRibbon.vb 文件在设计器中打开。名为 MyRibbon.xml 的 XML 文件也会添加到您的项目中。
  4. 在解决方案资源管理器中,右键单击 ThisAddin.cs 或 ThisAddin.vb,然后 然后点击查看代码。
  5. 将以下代码添加到 ThisAddin class。此代码覆盖 CreateRibbonExtensibilityObject 方法和 returns 功能区 XML class 到 Office 应用程序。

当我在第 5 步中添加 CreateRibbonExtensibilityObject() 代码时(如下所示):

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

我收到以下错误:

Cannot implicitly convert the type MyRibbon to Microsoft.Office.Core.IRibbonExtensibility. An explicit conversion exists (are you missing a cast)?

Visual Studio生成的class类型为RibbonBase

 partial class CLIREMPRibbon : Microsoft.Office.Tools.Ribbon.RibbonBase {...}

下面的类型转换抛出异常:

Unable to cast object of type MyRibbon to type Microsoft.Office.Core.IRibbonExtensibility.

如何将 RibbonBase 的正确类型转换应用于 IRibbonExtensibility 接口实例?

参见:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.tools.addinbase.createribbonextensibilityobject?view=vsto-2017

"对于使用功能区(可视化设计器)项模板添加到项目的 return 功能区,您不必重写此方法

默认情况下,此方法 return 是一个 RibbonManager 对象,代表项目中的所有功能区(可视化设计器)项。有关详细信息,请参阅功能区概述。"

我已从 XML 切换到使用可视化设计器,以便可以添加活动面板。

在 VSTO 中,您可以使用可视化设计器创建基本的自定义 Fluent UI,然后将其导出到功能区 XML 文件,之后可以对其进行扩展。不幸的是,并非所有功能都在功能区设计器中可用,因此有时您必须改用原始 XML 标记。在 How to: Export a ribbon from the Ribbon Designer to Ribbon XML 文章中阅读更多相关信息。所以,如果你对设计师没意见,就没有必要修改代码中的任何东西。您必须选择一种或另一种自定义 Fluent 的方式 UI。