代码之家  ›  专栏  ›  技术社区  ›  DarinH

在vsto3加载项中截获getCustomui回调

  •  0
  • DarinH  · 技术社区  · 15 年前

    我有一个vsto3字的加载项,可以使用自定义的功能区和任务栏等。

    现在,Office2010出现了,有了这个漂亮的新后台概念,我想加入其中。但是,据我所知,使用vsto需要vsto 4,这需要vs2010,这不是一个选项。

    Sooo.我开始在网上查找,发现了各种各样的例子,基本上,将后台XML放在我定义的任何功能区XML上,并将其作为getCustomui的值返回。一切都很好,除了使用vsto3,似乎没有任何方法可以“钩住”getcustomui的调用链。它全部由OfficeRibbon和RibbonManage类“自动”为您处理。

    我知道我可以+将外接程序转换为共享外接程序,并直接实现IDTExtensibility接口。我会失去所有VSTO的优点(是的,这是有争议的),但我会获得访问getCustomui呼叫的权限。

    但是,有没有人在使用vsto的同时尝试访问getCustomui+?有可能吗?

    我原以为我可以为RibbonManager创建一个包装类,但Lo,MS已经完成了看起来是对封装的最大破坏。RibbonManager实现了漂亮且简单的iribbonExtensibility接口,但是,在传递该接口的地方,它们实际上检查传递的对象,以确保它是实际类型的RibbonManager!啊,任何包装都可以。

    2 回复  |  直到 10 年前
        1
  •  0
  •   DarinH    15 年前

    结果证明这是可能的,只是不容易。必须在连接时重写CreateRibbonExtensibilityObject方法,以及CreateRibbonObjects和RequestService方法。

    然后,您必须创建一个包装内置VSTO RibbonManager对象的对象,并实现IReflect以截获反射调用并将其转发到基础RibbonManager。

    最后,在拦截器对象上,还必须实现iribbonextensibility,然后对该接口的getCustomui方法进行编码。

    完成所有这些操作后,您的getCustomUI将被调用并以您通过vsto定义的功能区的完整XML形式传递,然后您可以直接更改(在我的情况下,我需要添加后台支持),然后从函数返回该XML。

    当然不简单,但它是有效的。

        2
  •  0
  •   Community Mohan Dere    8 年前

    如果要在运行时在VSTO应用程序中编辑XML功能区,我在此处创建了一个简单的解决方案: Outlook 2007 ribbon customization in .NET using VS2010; insertBeforeMso dynamic function