2010-11-03 74 views
0

我有一個VSTO3的Word插件,使得使用自定義功能區和任務欄的GetCustomUI回調等攔截在VSTO3插件

現在,Office 2010中出現了,有這個漂亮的新的Backstage概念,我'想喜歡鉤入。但是,從我所知道的情況來看,使用VSTO做這件事需要Vsto 4,它需要VS2010,這不是一種選擇。

Soooo。我開始在網上查找,發現了各種各樣的例子,本質上,將後臺XML搭載到我定義的任何Ribbon xml上,並將其作爲GetCustomUI的值返回。除了使用VSTO3之外,一切都很好,似乎沒有任何方法可以「鉤」到GetCustomUI的調用鏈中。 OfficeRibbon和RibbonManage課程全部爲您自動處理。

我知道I + COULD +將插件轉換爲共享插件並直接實現IDTExtensibility接口。我會失去所有的優點(是的,這是有爭議的),但我可以訪問GetCustomUI調用。

任何人都試圖使用VSTO訪問GetCustomUI + WHILE +?它甚至有可能嗎?

我想我可以爲RibbonManager創建一個包裝類,但是,MS已經走了,做了什麼看起來是封裝的最高侵犯。 RibbonManager實現了漂亮易用的IRibbonExtensibility接口,然而,在接口傳遞的地方,他們實際上會檢查傳遞的對象以確保它是實際類型RibbonManager!呃,對於任何類型的包裝都是如此。

回答

0

原來,這可能,只是不容易。您必須重寫連接上的CreateRibbonExtensibilityObject方法,以及CreateRibbonObjects和RequestService方法。

然後,您必須創建一個包裝內置VSTO RibbonManager對象的對象,並實現iReflect攔截反射INVOKE調用並將它們轉發到基礎RibbonManager。

最後,在攔截器對象上,還必須實現IRibbonExtensibility,然後編寫該接口的GetCustomUI方法。

一旦你做了這些,你的GetCustomUI將被調用並通過你通過VSTO定義的功能區的完整XML傳遞,然後你可以直接修改(在我的情況下我需要添加後臺支持),並且然後從該函數返回該xml。

絕對不直接,但它的工作原理。