перехват обратного вызова GetCustomUI в надстройке VSTO3 - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть надстройка VSTO3 Word, которая использует пользовательские ленты и панели задач и т. Д.

Теперь пришло время Office 2010, и появилась новая изящная концепция BACKSTAGE, которую я хотел бы использовать. Однако, насколько я могу судить, для работы с VSTO требуется Vsto 4, для которого требуется VS2010, а это не вариант.

Тааак. Я начал искать в Интернете и нашел все виды примеров, по сути, встраивания закулисного XML в любой XML-файл Ribbon, который я определяю, и возвращая его как значение GetCustomUI. Все хорошо, кроме того, что если вы используете VSTO3, похоже, нет никакого способа «зацепиться» за цепочку вызовов для GetCustomUI. Все это «автоматически» обрабатывается для вас классами OfficeRibbon и RibbonManage.

Я знаю, что я + МОГУТ + конвертировать надстройку в общую надстройку и просто напрямую реализовывать интерфейсы IDTExtensibility. Я бы потерять все VSTO благость (да, это спорно), но я бы получить доступ к вызову GetCustomUI.

Кто-нибудь пытался получить доступ к GetCustomUI + WHILE +, используя VSTO? Это вообще возможно?

Я думал, что смогу создать класс-оболочку для RibbonManager, но вот, MS пошла и сделала то, что выглядит как серьезное нарушение инкапсуляции. RibbonManager реализует приятный и простой интерфейс IRibbonExtensibility, и, тем не менее, там, где этот интерфейс передается, они фактически проверяют переданный объект, чтобы убедиться, что он имеет реальный тип RibbonManager! Тьфу, так много для любой обертки.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2012

Если вы хотите редактировать ленту XML во время выполнения в приложении VSTO, я создал здесь простое решение: Настройка ленты Outlook 2007 в .NET с использованием VS2010;Динамическая функция insertBeforeMso

0 голосов
/ 10 ноября 2010

Оказывается, это возможно, но не просто. Необходимо переопределить метод CreateRibbonExtensibilityObject для connect, а также методы CreateRibbonObjects и RequestService.

Затем необходимо создать объект, который обернет встроенный объект VSTO RibbonManager и реализует iReflect для перехвата вызовов вызовов INVOKE и перенаправления их в базовый RibbonManager.

Наконец, на объекте-перехватчике вы также должны реализовать IRibbonExtensibility, а затем кодировать метод GetCustomUI этого интерфейса.

как только вы все это сделаете, ваш GetCustomUI будет вызван и передан в полном XML-формате лент, которые вы определили через VSTO, который вы затем можете изменить напрямую (в моем случае мне нужно было добавить поддержку за кулисами), а затем вернуть этот xml из функции.

определенно не просто, но это работает.

...