Лента, добавленная в VSTO для Excel, имеет тип RibbonBase, а не IRibbonExtensibility. - PullRequest
0 голосов
/ 12 июля 2020

Я создаю приложение VSTO (WinForms) и следую инструкциям по адресу:

https://docs.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 откроется в дизайнере. Файл XML с именем MyRibbon. xml также добавляется в ваш проект.
  4. В обозревателе решений щелкните правой кнопкой мыши ThisAddin.cs или ThisAddin.vb, а затем щелкните Просмотреть код.
  5. Добавьте следующий код в класс ThisAddin. Этот код переопределяет метод CreateRibbonExtensibilityObject и возвращает класс Ribbon XML в приложение Office.

Когда я добавляю код CreateRibbonExtensibilityObject() на шаге 5 (показано ниже):

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?

Ответы [ 2 ]

1 голос
/ 12 июля 2020

В VSTO вы можете создать базовый c пользовательский интерфейс Fluent с помощью визуального конструктора, а затем экспортировать его в файл ленты XML, который после этого можно расширить. К сожалению, не все функции доступны в конструкторе ленты, поэтому иногда приходится переключаться на использование необработанной разметки XML. Подробнее об этом читайте в статье Как: экспортировать ленту из конструктора лент в статью XML. Итак, если вас устраивает дизайнер, нет необходимости что-либо изменять в коде. Вы должны выбрать тот или иной способ настройки пользовательского интерфейса Fluent.

0 голосов
/ 12 июля 2020

См .:

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

" Вам не нужно переопределять этот метод для возврата лент, которые вы добавляете в проект с помощью Шаблон элемента ленты (визуальный конструктор) .

По умолчанию этот метод возвращает объект RibbonManager, который представляет все элементы ленты (визуальный конструктор) в проекте. Дополнительные сведения см. В разделе «Обзор ленты».

Я переключился с XML на использование Visual Designer, чтобы добавить активную панель.

...