我正在研究Word 2007应用程序级加载项。到目前为止,除了将加载项的Ribbon界面转换为XML之外,我还没有遇到过重大障碍。我必须使用Ribbon XML,因为我正在处理的功能只能这样完成。问题是,通过切换到功能区XML,我不能再通过Globals.Ribbons在运行时访问该界面。此链接http://msdn.microsoft.com/en-us/library/bb772088.aspx在解释如何访问可视设计器功能区方面做得很好,但完全忽略了XML功能区情况。具体来说,我需要能够访问一些视觉控件,如标签。我怎样才能做到这一点?有没有办法在运行时访问功能区(XML)?
回答
Globals.Ribbons是一个VSTO设计器功能,如果您使用RibbonXML,那么您不具备此功能。 设计师在封面下实际做的是它将为Office创建Ribbon xml,然后当Office进行回调时,VSTO将为该上下文(文档)引发适当的事件处理程序。因为您使用的是RibbonXML,所以完全绕过了VSTO Ribbon设计器支持(我更喜欢这种方式,速度更快,而且您有更多的控制权)。
使用功能区XML,您将不得不为您的标签注册一个onLoad回调,然后Office将向您传递一个IRibbonControl,它将成为标签,并且您可以执行的操作有限。如果你想改变文本,然后离开我的头顶,你将不得不注册一个getText回调,然后使该功能控件失效,这将导致getText回调被重新评估。
有更多关于你实际想要实现的信息会很方便=)我有一种感觉,我的VSTO contrib项目也会让你的生活变得更容易,因为它在使用Ribbon xml时给你很多很好的Ribbon Designer功能。但让我知道你想做什么,我可以给你更多的信息。
干杯, 杰克
你什么时候想访问Globals.ribbons?
据我所知,它将不会被填充,直到非常接近Word的启动阶段结束。
如果您尝试过早访问它,则不会有任何定义的功能区。
我试图从Application_DocumentOpen访问Globals.Ribbons这是打开一个新的文档时调用的函数。事情是,这用于视觉设计器功能区。但是,在切换之后,尽管显示了XML Ribbon,但Globals.Ribbons.Count始终为0。 – AlgolDocks 2011-04-27 11:07:55
当丝带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;
}
- 1. 有没有办法在运行时访问调试符号?
- 2. 在C#中,有没有办法在运行时访问源代码中的xml注释(VS中的标签)?
- 3. 访问分区功能:有没有办法让它显示没有计数的垃圾箱类别?
- 4. 有没有办法在我无法访问的页面上运行JavaScript?
- 5. RemoveEventListener没有运行功能
- 6. 功能没有运行
- 7. 有没有办法在autotest上运行一个黄瓜功能文件?
- 8. 有没有办法让F12工具打印出正在运行的功能?
- 9. 有没有办法在访问中存储时间戳?
- 10. 有没有办法让Visual Studio在成功构建时运行“Transform All Templates”?
- 11. 有没有办法脱机运行Trac?
- 12. 有没有办法运行NPM安装
- 13. 有没有办法使用GetRows()方法访问整个行?
- 14. 有没有办法在java中查询argv的运行时?
- 15. 有没有办法在运行时获取DefaultProperty元数据?
- 16. 有没有办法在运行时找到PackageFamilyName?
- 17. 有没有办法在运行时更改GridViewColumn的CellTemplate?
- 18. ,有没有办法在运行时确定类的成员?
- 19. 有没有办法在运行时从Fulltrust切换到PartialTrust? (WPF)
- 20. 有没有办法在运行时使用d:DesignData xaml?
- 21. 有没有办法在运行时获取Bundle ID?
- 22. 有没有办法在运行时更改控制台图标
- 23. 有没有办法在运行时获取类的字节码?
- 24. 有没有办法在运行时设置#define的值?
- 25. 有没有办法在失败时重新运行测试类
- 26. 有没有办法在运行泄漏时调试(iPhone)?
- 27. 有没有办法在运行时更改android主题?
- 28. 有没有办法在运行时加载类jar和包?
- 29. 有没有办法让CTabItem不能被用户访问?
- 30. 有没有办法在XML资源
嗨杰克。感谢你的回答。自从我发布这个问题后,我做了很多研究,并得出了相同的结论。我仍然希望有人找到某种方式来访问Global.Ribbons的接口。无论如何,我实际上已经转换了我的解决方案,现在我使用RibbonXML和回调来更改标签,显示信息并更改某些控件的可见性。 – AlgolDocks 2011-05-18 09:22:29
您的回应/回答杰克非常感谢。 MSDN似乎没有覆盖这个地方。使控制无效完美。 – Daniel 2012-01-30 16:39:41