我正在开发outlook 2007 VSTO Addin。我添加了一个带按钮的功能区。我试图在按钮单击时引发一个事件。在Application.Inspectors集合的NewInspector事件中,我应该可以在Presenter中挂钩这个功能区事件。
问题是如何抓住Inspector的Ribbon。我试过Globals.Ribbons.MyRibbon
这样做。但是它只适用于第一个检查员。我也试过了Globals.Ribbons[inspector].MyRibbon
。
看起来在创建NewInspector时,Ribbons Collection有0个项目,并且只有在执行NewInspector事件处理程序后才会加载Ribbon。
是否有任何事件要知道功能区加载时是否有任何替代方式,我可以在Presenter中保留业务逻辑而不是在功能区视图中。
答案 0 :(得分:1)
答案很费力。
据我所知,色带未通过vsto或com interop曝光,它也是无状态的,因此无论显示多少个检查器,色带都会被加载一次。
我花了很长时间才能优雅地解决这个问题,而且代码非常复杂。我还应该提一下,我选择使用功能区XML而不是设计师来解决问题,我发现设计师限制太多了。
它的核心是你必须创建一个自定义的IRibbonExtensibility实现,然后在功能区XML中重写回调,这样它们就会回调你的IRibbonExtensibility impl上的方法。 然后,您必须处理已加载的事件和新的检查器事件,以便您可以将两者相关联。
实际上还有更多内容,您可以在VSTO contrib项目中查看我的代码。 http://vstocontrib.codeplex.com/SourceControl/changeset/view/b35f26fdca15#src%2fOutlook.Utility%2fRibbonFactory%2fRibbonFactory.cs
如果你正在为VSTO构建一个MVP框架,请告诉我一行,因为我有兴趣看看你在做什么。