Открытие двух лент с одной загрузкой для Excel 2010 с помощью C#

У меня есть две ленты, которые я хочу загрузить, одна на основной ленте и одна за кулисами. Я должен загрузить два в методе переопределения, но у меня возникли проблемы:

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 покажет, а Backstage не будет, если я сделаю это так:

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. Я застрял, может кто-нибудь помочь?

1 ответ

Решение

Ну, я думаю, что вы на самом деле не можете этого сделать, НО я разработал работу для тех из вас, кто заинтересован, что, похоже, не так много. Вы действительно можете объединить два XML и получить тандемную ленту Visual Designer, работающую вместе с лентой Backstage, единственная проблема в том, что вы не можете создавать больше элементов с помощью Visual Designer, вы должны создавать их с использованием XML, который не является плохой путь, но если ваш конечный пользователь все еще хочет добавить кнопки и другие элементы на ленту, это может быть проблемой. Так что я сделал для этого добавление двух разных проектов к одному решению, тогда вам просто нужно, чтобы два проекта разговаривали друг с другом, и у вас есть свой ответ. Убедитесь, что у вас есть ссылка для основной ленты с Backstage, затем вам нужно создать COM-объект на ленте Backstage:

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

И это действительно так. Не так уж плохо.

Другие вопросы по тегам