Есть ли способ получить доступ к ленте (XML) во время выполнения? - PullRequest
10 голосов
/ 25 апреля 2011

Я работаю над надстройкой на уровне приложения Word 2007.До сих пор я не сталкивался с серьезными препятствиями, за исключением преобразования интерфейса ленты в надстройке в XML.Я должен использовать Ribbon XML, потому что функция, над которой я работаю, может быть реализована только таким способом.Проблема в том, что при переходе на Ribbon XML я больше не могу получить доступ к интерфейсу во время выполнения через Globals.Ribbons.Эта ссылка http://msdn.microsoft.com/en-us/library/bb772088.aspx хорошо объясняет, как получить доступ к ленте Visual Designer, но она полностью игнорирует случай ленты XML.В частности, мне нужно иметь доступ к некоторым визуальным элементам управления, таким как метки.Как мне этого добиться?

Ответы [ 3 ]

10 голосов
/ 15 мая 2011

Globals.Ribbons - это дизайнерская функция VSTO, если вы используете RibbonXML, то у вас ее нет.На самом деле дизайнер работает под покровом: он создает XML-ленту для Office, а затем, когда office делает обратный вызов, VSTO вызывает соответствующий обработчик событий для этого контекста (документа).Поскольку вы используете RibbonXML, вы полностью обходите поддержку конструктора лент VSTO (я предпочитаю так, это быстрее и у вас больше контроля).

С ленточным XML вам придется зарегистрировать обратный вызов onLoad для вашей метки, Office затем передаст вам IRibbonControl, который будет меткой, и у вас будет ограниченное количество вещей, которые вы можете сделать.Если вы хотите изменить текст, то вам придется зарегистрировать обратный вызов getText, а затем лишить законной силы ленточный элемент управления, что приведет к повторной оценке обратного вызова getText.

Наличие дополнительной информации о том, чтоВы на самом деле хотите достичь, было бы удобно =) У меня есть ощущение, что мой проект VSTO contrib также сделает вашу жизнь намного проще, так как он дает вам много замечательных функций Ribbon Designer при использовании ленты XML.Но дайте мне знать, что вы хотите сделать, и я могу дать вам больше информации об этом.

Приветствия, Джейк

3 голосов
/ 04 марта 2012

При работе с Ribbon XML я попробовал это, но не смог получить доступ к свойству Ribbon1 из Globals.Ribbons .. Простого свойства там не было ..

Однако я нашел другое решение, которое в основном касалось правильного приведения типов.

В этомAddIn.cs:

private Microsoft.Office.Core.IRibbonExtensibility ribbonObj;
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
 ribbonObj = new Ribbon1(this);
 return ribbonObj;
}

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{ 
 // Calling the public method TEST() in Ribbon1.cs 
 //MyNameSpace is the namespace used in your project ie., your project name 
 ((MyNameSpace.Ribbon1)ribbonObj).TEST();
 // Calling the public variable flag in Ribbon1.cs  
 ((MyNameSpace.Ribbon1)ribbonObj).flag;
}
1 голос
/ 25 апреля 2011

Когда вы пытаетесь получить доступ к Globals.ribbons?

Насколько я помню, он не будет заполнен до самого конца фазы запуска Word.

, если выпопробуйте получить к нему доступ слишком рано, ленты пока не определены.

...