Есть ли способ получить доступ к ленте (XML) во время выполнения?


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

3 9

3 ответа:

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

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

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

Ура!, Джейк

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

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

В Файле.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;
}

Когда вы пытаетесь получить доступ к глобалам.ленты?

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

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