我有一个VSTO3 Word插件,可以使用自定义色带和任务栏等。
现在,Office 2010出现了,这是一个非常新的BACKSTAGE概念,我想加入其中。但是,据我所知,使用VSTO需要Vsto 4,这需要VS2010,这不是一个选项。
SOOOO。我开始在网上寻找各种各样的例子,基本上是将后台XML搭载到我定义的任何Ribbon xml上,并将其作为GetCustomUI的值返回。一切都很好,除非您使用VSTO3,似乎没有任何方法可以“挂钩”到GetCustomUI的调用链中。这些都是OfficeRibbon和RibbonManage类为您“自动”处理的。
我知道我+ COULD +将插件转换为共享插件并直接实现IDTExtensibility接口。我会失去所有的vsto善良(是的,那是有争议的)但我可以访问GetCustomUI调用。
但是每个人都试图使用VSTO访问GetCustomUI + WHILE +吗?它甚至可能吗?
我以为我可以为RibbonManager创建一个包装器类,但是,我已经完成了看起来像是封装的最重要的东西。 RibbonManager实现了简单易用的IRibbonExtensibility接口,然而,在传递该接口的地方,它们实际上检查传递的对象以确保它是实际类型的RibbonManager!呃,对于任何一种包装都是如此。
答案 0 :(得分:0)
事实证明这是可能的,但并不容易。您必须覆盖connect上的CreateRibbonExtensibilityObject方法,以及CreateRibbonObjects和RequestService方法。
然后,您必须创建一个包装内置VSTO RibbonManager对象的对象,并实现iReflect以拦截反射INVOKE调用并将它们转发到底层RibbonManager。
最后,在拦截器对象上,你还必须实现IRibbonExtensibility,然后编写该接口的GetCustomUI方法。
一旦你完成所有这些,你的GetCustomUI将被调用并通过VSTO定义的色带的完整XML传递,然后你可以直接改变(在我的情况下我需要添加后台支持),然后从函数中返回那个xml。
绝对不是直截了当的,但它确实有效。
答案 1 :(得分:0)
如果您想在VSTO应用中运行时编辑XML功能区,我在此处创建了一个简单的解决方案:Outlook 2007 ribbon customization in .NET using VS2010; insertBeforeMso dynamic function