2010-05-24 113 views
0

我正在开发Outlook 2007 VSTO Addin.I已添加一个功能区并带有按钮。我正在尝试在按钮单击时引发一个事件。在Application.Inspectors集合的NewInspector事件中,我应该能够在Presenter中挂接此Ribbon事件。Outlook 2007功能区和MVP

问题是如何打开检查员的Ribbon。我试过Globals.Ribbons.MyRibbon这样做。显然它只适用于第一个检查员。我也试过Globals.Ribbons[inspector].MyRibbon

看起来像创建NewInspector时Ribbons集合有0项目和功能区加载仅在执行NewInspector事件处理程序后发生。

是否有任何事件知道何时加载功能区或者有没有其他方法,我可以在Presenter中保留业务逻辑而不是在功能区视图中。

回答

1

答案是有很大的努力..

至于我可以告诉色带没有通过VSTO或COM互操作暴露出来,这也是无状态的,所以,带将一次不管有多少个督察加载被显示。

我花了很长时间才能优雅地解决这个问题,而且代码非常复杂。我还应该提及,我选择使用功能区XML而不是设计者解决问题,但我发现设计人员的限制太多。

它的胆量是你必须创建一个自定义IRibbonExtensibility实现,然后重写功能区XML中的回调函数,以便它们回调IRibbonExtensibility实例上的方法。 然后,您必须处理加载的事件和新的检查器事件,以便您可以将两者联系起来。

实际上还有很多,你可以在VSTO contrib项目中查看我的代码。 http://vstocontrib.codeplex.com/SourceControl/changeset/view/b35f26fdca15#src%2fOutlook.Utility%2fRibbonFactory%2fRibbonFactory.cs

如果你正在为VSTO构建一个MVP框架,请给我一条线,因为我有兴趣了解你在做什么。