我正在构建一个VSTO应用程序(WinForms(,并遵循以下说明:
https://learn.microsoft.com/en-us/visualstudio/vsto/walkthrough-creating-a-custom-tab-by-using-ribbon-xml?view=vs-2019年
步骤如下所示:
- 在"项目"菜单上,单击"添加新项目">
- 在"添加新项"对话框中,选择"功能区(XML(">
- 将新功能区的名称更改为MyRibbon,然后单击"添加"。MyRibbon.cs或MyRibbon.vb文件将在设计器中打开。一个名为MyRibbon.XML的XML文件也会添加到您的项目中
- 在解决方案资源管理器中,右键单击ThisAddin.cs或ThisAddin.vb,然后然后单击"查看代码">
- 将以下代码添加到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,这样我就可以添加一个活动面板。