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

C# 添加到VSTO for Excel的功能区的类型为RibbonBase,而不是IribboneExtensibility,c#,vsto,C#,Vsto,我正在构建一个VSTO应用程序(WinForms),并按照以下说明进行操作: 步骤如下所示: protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject() { return new MyRibbon(); } 在“项目”菜单上,单击“添加新项” 在“添加新项目”对话框中,选择功能区(XML) 将新功能区的名称

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

步骤如下所示:

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
        {
            return new MyRibbon();
        }
  • 在“项目”菜单上,单击“添加新项”
  • 在“添加新项目”对话框中,选择功能区(XML)
  • 将新功能区的名称更改为MyRibbon,然后单击“添加”。MyRibbon.cs或MyRibbon.vb文件将在设计器中打开。名为MyRibbon.XML的XML文件也添加到项目中
  • 在解决方案资源管理器中,右键单击ThisAddin.cs或ThisAddin.vb,然后单击 然后单击查看代码
  • 将以下代码添加到ThisAddin类。此代码重写CreateRibboneExtensibilityObject方法,并将Ribbon XML类返回给Office应用程序
  • 当我在步骤5中添加
    createRibboneExtensibilityObject()
    代码时(如下所示):

    我得到以下错误:

    Cannot implicitly convert the type MyRibbon to Microsoft.Office.Core.IRibbonExtensibility. An explicit conversion exists (are you missing a cast)?
    
    通过可视化研究生成的类的类型为
    RibbonBase

     partial class CLIREMPRibbon : Microsoft.Office.Tools.Ribbon.RibbonBase {...}
    
    下面的类型转换引发异常:

    Unable to cast object of type MyRibbon to type Microsoft.Office.Core.IRibbonExtensibility.
    
    如何将RibboneExtensibility接口实例的正确类型转换应用于RibboneBase?

    请参阅:

    您不必重写此方法,即可返回通过使用功能区(可视化设计器)项模板添加到项目中的功能区

    默认情况下,此方法返回一个RibbonManager对象,该对象表示项目中的所有Ribbon(可视化设计器)项。有关详细信息,请参阅Ribbon Overview。“


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

    在VSTO中,您可以使用Visual Designer创建一个基本的自定义Fluent UI,然后将其导出到一个功能区XML文件,该文件可在以后扩展。不幸的是,功能区设计器中并非所有功能都可用,因此有时您必须改用原始XML标记。在文章中阅读更多关于这方面的内容。因此,如果您对设计器很满意,则无需修改代码中的任何内容。您必须选择一种或另一种自定义Fluent UI的方式


    这些都是很好的澄清。我已经用XML和WPF启动了VSTO。我回到Ribbon Designer和WinForms,以便使用操作面板。如果将功能区导出为XML,则需要实现CreateRibbonExtensibilityObject()。如果我不需要用XML进一步自定义功能区,我就不需要实现CreateRibbonExtensibilityObject()!是否使用ribbon designer并不重要。