2011-04-25 87 views
9

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

回答

8

Globals.Ribbons是一个VSTO设计器功能,如果您使用RibbonXML,那么您不具备此功能。 设计师在封面下实际做的是它将为Office创建Ribbon xml,然后当Office进行回调时,VSTO将为该上下文(文档)引发适当的事件处理程序。因为您使用的是RibbonXML,所以完全绕过了VSTO Ribbon设计器支持(我更喜欢这种方式,速度更快,而且您有更多的控制权)。

使用功能区XML,您将不得不为您的标签注册一个onLoad回调,然后Office将向您传递一个IRibbonControl,它将成为标签,并且您可以执行的操作有限。如果你想改变文本,然后离开我的头顶,你将不得不注册一个getText回调,然后使该功能控件失效,这将导致getText回调被重新评估。

有更多关于你实际想要实现的信息会很方便=)我有一种感觉,我的VSTO contrib项目也会让你的生活变得更容易,因为它在使用Ribbon xml时给你很多很好的Ribbon Designer功能。但让我知道你想做什么,我可以给你更多的信息。

干杯, 杰克

+0

嗨杰克。感谢你的回答。自从我发布这个问题后,我做了很多研究,并得出了相同的结论。我仍然希望有人找到某种方式来访问Global.Ribbons的接口。无论如何,我实际上已经转换了我的解决方案,现在我使用RibbonXML和回调来更改标签,显示信息并更改某些控件的可见性。 – AlgolDocks 2011-05-18 09:22:29

+0

您的回应/回答杰克非常感谢。 MSDN似乎没有覆盖这个地方。使控制无效完美。 – Daniel 2012-01-30 16:39:41

1

你什么时候想访问Globals.ribbons?

据我所知,它将不会被填充,直到非常接近Word的启动阶段结束。

如果您尝试过早访问它,则不会有任何定义的功能区。

+0

我试图从Application_DocumentOpen访问Globals.Ribbons这是打开一个新的文档时调用的函数。事情是,这用于视觉设计器功能区。但是,在切换之后,尽管显示了XML Ribbon,但Globals.Ribbons.Count始终为0。 – AlgolDocks 2011-04-27 11:07:55

3

当丝带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; 
} 
相关问题