Перенаправление обратных вызовов для отделения функциональности ленты от общей надстройки - PullRequest
1 голос
/ 17 ноября 2010

Я пытаюсь разделить функциональность совместно используемой надстройки и соответствующей ленты (интегрированной через конструктор лент или XML в VS10). Контекст решения состоит из нескольких проектов, в которых надстройка представляет собой узел с интерфейсом для другой сборки, загружаемой во время выполнения. В этой сборке я хочу получить доступ к методам обратного вызова ленты, реализованным в совместно используемой надстройке (connect.cs). Приложение MSProject2010, которое я пытался внедрить, обернуто в эту ленту, чтобы предоставить доступ к экземпляру Project.

В Хосте есть Startup () - функция, которая просматривает все сборки в определенном каталоге и интегрирует тот с правильным интерфейсом. Итак, функция AddIn_Startup (Params), расположенная в сборке, вызывается через интерфейс, и вот контекст, в котором я хочу получить доступ к своим обратным вызовам ленты.

Теперь, как можно направить обратные вызовы из приложения MSProject через общую надстройку в сборку?

Другой вопрос: как получить доступ к пользовательской ленте через внешнюю сборку? (Та же среда)

С наилучшими пожеланиями

1 Ответ

2 голосов
/ 24 ноября 2010

Я сам нашел решение.

Проблема в контексте общего дополнения. Сложно манипулировать средой ленты по сравнению с тем, как она реализуется через VSTO. Я превратил shared-addin в MSProject2010-Addin, а затем передаю саму ленту как в интерфейс. Это возможно путем создания ленты с конструктором лент, который регистрирует ленту в классе Globals, который поставляется надстройкой. (Globals.Ribbons.RibbonName.Ribbon). С другой стороны, я бросил этот объект в OfficeRibbon и назначил его пустому OfficeRibbon. Здесь я могу манипулировать и изменять свойства ленты и создавать EventHandlers. Невозможно добавить вкладки, кнопки или другие элементы управления на ленту во время выполнения! По крайней мере, я не мог найти способ сделать это.

...