有没有办法在运行时访问功能区(XML)?

时间:2011-04-25 15:38:32

标签: c# ms-word vsto ms-office add-in

我正在使用Word 2007应用级加载项。到目前为止,除了将加载项的Ribbon界面转换为XML之外,我没有遇到过重大障碍。我必须使用Ribbon XML,因为我正在处理的功能只能通过这种方式完成。问题是通过切换到Ribbon XML,我无法再通过Globals.Ribbons在运行时访问该接口。此链接http://msdn.microsoft.com/en-us/library/bb772088.aspx可以很好地解释如何访问可视设计器功能区,但它完全忽略了XML功能区案例。具体来说,我需要能够访问一些视觉控件,如标签。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:10)

Globals.Ribbons是VSTO设计器功能,如果您使用RibbonXML,则您没有此功能。 设计师实际上做的是它将为Office创建功能区xml,然后当office进行回调时,VSTO将为该上下文(文档)引发适当的事件处理程序。因为您正在使用RibbonXML,所以您完全绕过VSTO Ribbon设计器支持(我更喜欢这种方式,它更快,您可以更好地控制)。

使用功能区XML,您必须为您的标签注册一个onLoad回调,Office然后会传递一个IRibbonControl,它将成为标签,您可以做的事情有限。如果你想更改文本,那么你必须注册一个getText回调,然后使该功能区控件无效,这将导致重新评估getText回调。

有关实际想要实现的内容的更多信息将非常方便=)我感觉我的VSTO contrib项目也会让您的生活更轻松,因为它在使用功能区xml时为您提供了许多优秀的Ribbon Designer功能。但是让我知道你想做什么,我可以给你更多信息。

干杯, 杰克

答案 1 :(得分:3)

使用Ribbon XML时,我尝试了这个但是我无法从Globals.Ribbons访问Ribbon1属性..该属性简单不存在..

然而,我提出了另一种解决方案,它基本上与正确的类型转换有关。

在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;
}

答案 2 :(得分:1)

您何时尝试访问Globals.ribbons?

我记得,在Word的启动阶段即将结束之前,它不会被填充。

如果您尝试过早访问它,则不会定义任何色带。