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



我正在构建一个VSTO应用程序(WinForms(,并遵循以下说明:

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

步骤如下所示:

  1. 在"项目"菜单上,单击"添加新项目">
  2. 在"添加新项"对话框中,选择"功能区(XML(">
  3. 将新功能区的名称更改为MyRibbon,然后单击"添加"。MyRibbon.cs或MyRibbon.vb文件将在设计器中打开。一个名为MyRibbon.XML的XML文件也会添加到您的项目中
  4. 在解决方案资源管理器中,右键单击ThisAddin.cs或ThisAddin.vb,然后然后单击"查看代码">
  5. 将以下代码添加到ThisAddin类中。此代码重写CreateRibbonExtensionObject方法,并将RibbonXML类返回给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 Studion生成的类的类型为RibbonBase

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

下面的类型转换引发异常:

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

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

在VSTO中,您可以使用可视化设计器创建一个基本的自定义Fluent UI,然后将其导出到功能区XML文件中,该文件可以在之后进行扩展。不幸的是,功能区设计器中并不是所有功能都可用,因此有时您不得不改用原始XML标记。请参阅"如何:将功能区设计器中的功能区导出为功能区XML"一文中的详细信息。因此,如果您对设计器很满意,则无需修改代码中的任何内容。您必须选择一种或另一种自定义Fluent UI的方式。

  • 演练:使用功能区设计器创建自定义选项卡
  • 演练:使用功能区XML创建自定义选项卡

参见:

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

">您不必重写此方法即可返回通过使用功能区(Visual Designer(项模板添加到项目中的Ribbons

默认情况下,此方法返回RibbonManager对象,该对象表示项目中的所有Ribbon(Visual Designer(项。有关详细信息,请参见功能区概述">

我已经从XML转换为使用Visual Designer,这样我就可以添加一个活动面板。

最新更新