1

我有两条要加载的色带,一条在主色带上,一条在后台。我必须在覆盖方法中加载这两个,但我遇到了麻烦:

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
     return Globals.Factory.GetRibbonFactory().CreateRibbonManager(new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] 
     {
          new Ribbon1(), 
          new Backstage() as Microsoft.Office.Tools.Ribbon.IRibbonExtension 
     });
}

如果我这样做,Ribbon1 会显示,但后台不会,如果我这样做:

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
    return new Microsoft.Office.Tools.Ribbon.RibbonManager(new Microsoft.Office.Tools.Ribbon.OfficeRibbon[]
    {
       new Ribbon1() as Microsoft.Office.Tools.Ribbon.OfficeRibbon,
       new Backstage() as Microsoft.Office.Tools.Ribbon.OfficeRibbon
    });
}

我无法使用 RibbonManager 创建抽象类或接口的实例。我被卡住了,有人可以帮忙吗?

4

1 回答 1

0

好吧,我想您实际上无法做到这一点,但是我确实为感兴趣的人开发了一种解决方法,但似乎并不多。您确实可以组合这两个 XML 并获得一个串联的 Visual Designer Ribbon 与 Backstage Ribbon 一起工作,唯一的问题是您无法使用 Visual Designer 创建更多项目,您必须使用 XML 创建它们,这不是不好的方法,但如果您的最终用户仍想将按钮和其他项目添加到功能区,这可能是一个问题。所以我为此所做的就是将两个不同的项目添加到一个解决方案中,然后你只需要让这两个项目相互交谈,你就会得到答案。确保您在后台具有主功能区的引用,然后您必须在后台功能区中创建一个 COM 对象:

[ComVisible(true)]
[ComDefaultInterface(typeof(IBackStageInfo))]

就是这样。没那么糟。

于 2011-11-14T16:23:07.930 回答