2011-04-25 20 views
9

Estoy trabajando en un complemento de nivel de aplicación de Word 2007. Hasta ahora, no he experimentado grandes obstáculos, excepto para convertir la interfaz Ribbon del complemento a XML. Tengo que usar Ribbon XML porque la función en la que estoy trabajando solo se puede hacer de esta manera. El problema es que al cambiar a Ribbon XML ya no puedo acceder a la interfaz en tiempo de ejecución a través de Globals.Ribbons. Este enlace http://msdn.microsoft.com/en-us/library/bb772088.aspx hace un buen trabajo explicando cómo acceder a una cinta de Visual Designer, pero ignora por completo el caso de XML Ribbon. Específicamente, necesito poder acceder a algunos controles visuales como etiquetas. ¿Cómo puedo conseguir esto?¿Hay alguna manera de acceder a Ribbon (XML) en tiempo de ejecución?

Respuesta

8

Globals.Ribbons es una característica del diseñador VSTO, si utiliza RibbonXML, entonces no tiene esta característica. Lo que el diseñador realmente hace bajo las cubiertas es crear cinta xml para Office, luego cuando la oficina hace una devolución de llamada, VSTO levantará el controlador de eventos apropiado para ese contexto (documento). Debido a que está utilizando RibbonXML, omite por completo el soporte del diseñador de cinta VSTO (lo prefiero de esta manera, es más rápido y tiene más control).

Con ribbon XML tendrá que registrar una devolución de llamada onLoad para su etiqueta, Office le pasará un IRibbonControl, que será la etiqueta, y usted tiene cosas limitadas que puede hacer. Si quisieras cambiar el texto, entonces deberías registrar una devolución de llamada getText, luego invalidar ese control de cinta, lo que hará que la devolución de llamada getText sea reevaluada.

Tener más información acerca de lo que realmente quiere lograr sería útil =) Tengo la sensación de que mi proyecto VSTO contrib también hará su vida mucho más fácil, ya que le ofrece muchas de las características agradables de Ribbon Designer al utilizar ribbon xml . Pero dime qué es lo que quieres hacer y puedo darte más información al respecto.

Saludos, Jake

+0

Hola, Jake. Gracias por la respuesta. De hecho investigué mucho desde que publiqué esta pregunta y llegué a la misma conclusión. Todavía esperaba que alguien encontrara alguna forma de acceder a la interfaz desde Global.Ribbons. De todos modos, en realidad convertí mi solución y ahora uso RibbonXML y devoluciones de llamadas para cambiar las etiquetas, mostrar información y cambiar la visibilidad de ciertos controles. – AlgolDocks

+0

Su respuesta/respuesta Jake es muy apreciada. MSDN no parece cubrir esto en ninguna parte. Invalidar el control funcionó perfectamente. – Daniel

1

¿Cuándo intentas acceder a Globals.ribbons?

Como recuerdo, no se completará hasta casi el final de la fase de inicio de Word.

si intenta acceder demasiado pronto, no habrá ninguna cinta definida todavía.

+0

Estoy intentando acceder a los Globals.Ribbons de Application_DocumentOpen que es la función que es llamada cuando se abre un nuevo documento. El caso es que esto solía funcionar para la cinta Visual Designer. Sin embargo, después de cambiar, Globals.Ribbons.Count siempre es 0, aunque se muestra la cinta XML. – AlgolDocks

3

Al trabajar con XML de la cinta, yo tratamos de esto, pero yo no podía acceder a la propiedad de los Ribbon1 Globals.Ribbons .. El simple propiedad no estaba allí ..

Sin embargo, se me ocurrió otra solución que básicamente tenía que ver con un tipo de molde adecuado.

En ThisAddIn.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; 
} 
Cuestiones relacionadas