VSTO - общий плагин для Word и Excel для изменения ленты - PullRequest
2 голосов
/ 16 июля 2009

Я успешно использовал шаблоны надстроек Excel и Word в Visual studio 2008 для создания проекта, который добавляет на ленту, но у меня возникают проблемы с общими надстройками. Я создал надстройку, которая использует XML-файл для изменения и добавления на ленту, и я могу ловить события от добавленных кнопок, но я не могу понять, как скрыть кнопки или добавить элементы управления, как только это произойдет. и работает. По сути, мне нужна какая-то ссылка на ленту, и все, что я могу получить, это ссылка на объект, который реализует IRibbonUi, который не помогает. У кого-нибудь есть хорошие примеры надстроек или советы?

1 Ответ

2 голосов
/ 01 сентября 2009

Существует два возможных способа управления видимостью элементов управления ленты. Вы можете использовать свойство visible или событие getVisible. Оба подхода требуют изменения файла XML, который вы уже используете.

Если это ваш частичный XML-файл:

<button id="MyButton" label="Hello" onAction="MyButtonOnAction"/>

Затем вы можете скрыть элемент управления, изменив его на:

<button id="MyButton" label="Hello" onAction="MyButtonOnAction" visible="false"/>

Это не очень полезно, так как оно жестко закодировано. Чтобы приблизиться к тому, что вы ищете, измените xml на:

<button id="MyButton" label="Hello" onAction="MyButtonOnAction" getVisible="MyButtonGetVisible"/>

И затем, точно так же, как вы сделали обратный вызов MyButtonOnAction, вы создаете обратный вызов MyButtonGetVisible, который имеет такую ​​подпись (C #):

bool MyButtonGetVisible(IRibbonControl control)

С помощью этого метода вы можете вернуть true или false в зависимости от того, хотите ли вы показать / скрыть кнопку. Следующий вопрос, который у вас может возникнуть, заключается в том, что обратный вызов MyButtonGetVisible вызывается только один раз сразу после загрузки моей надстройки. Я хочу показать / скрыть кнопку позже, как мне вызвать обратный вызов для запуска?

Для этого вы можете использовать имеющийся у вас объект IRibbonUI и вызвать функцию Invalidate, которая приведет к аннулированию всей вашей ленты, что вызовет обратный вызов. Если вам требуется более точное управление, вы можете вызвать функцию InvalidateControl, которая принимает ControlID в качестве параметра и аннулирует только один элемент управления, что приведет к вызову обратного вызова.

Что касается добавления элементов управления на лету, я не верю, что это возможно.

Дополнительные ресурсы я бы предложил: часть 1 часть 2 часть 3

...