Существует два возможных способа управления видимостью элементов управления ленты. Вы можете использовать свойство 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