我正在开发一个Word 2007应用级插件。到目前为止,除了将加载项的Ribbon界面转换为XML之外,我还没有遇到任何主要障碍。我必须使用Ribbon XML,因为我正在开发的功能只能通过这种方式实现。问题是,通过切换到Ribbon XML,我不能再在运行时通过global . ribbons访问接口。这个链接http://msdn.microsoft.com/en-us/library/bb772088.aspx很好地解释了如何访问Visual Designer Ribbon,但是它完全忽略了XML Ribbon的情况。具体来说,我需要能够访问一些视觉控件,如标签。我怎样才能做到这一点呢?
全局变量。ribbon是一个VSTO设计器功能,如果你使用RibbonXML,那么你就没有这个功能。设计器在幕后实际做的是为Office创建ribbon xml,然后当Office进行回调时,VSTO将为该上下文(文档)引发适当的事件处理程序。因为您正在使用RibbonXML,所以您完全绕过了VSTO Ribbon设计器支持(我更喜欢这种方式,它更快,您有更多的控制)。
使用ribbon XML,你必须为你的标签注册一个onLoad回调,然后Office将传递给你一个IRibbonControl,这将是标签,你可以做的事情有限。如果你想改变文本,那么你必须注册一个getText回调,然后使该ribbon控件无效,这将导致getText回调被重新评估。
有更多关于你真正想要实现的信息将是方便的=)我有一种感觉,我的VSTO贡献项目也将使你的生活更容易,因为它给了你许多漂亮的功能区设计器功能时,使用功能区xml。但是让我知道你想做什么,我可以给你更多的信息。
欢呼,杰克
当使用Ribbon XML时,我尝试了这个,但是我无法从global . ribbons中访问Ribbon1属性。属性simple不存在。
然而,我想出了另一个解决方案,基本上与适当的类型强制转换有关。
在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;
}
这取决于您何时尝试访问global .ribbons。
我记得,直到Word的启动阶段快结束时,它才会被填充。
如果您尝试太早访问它,那么还没有定义任何ribbon