【问题标题】:Outlook 2007 Ribbon and MVPOutlook 2007 功能区和 MVP
【发布时间】:2011-01-19 23:16:38
【问题描述】:

我正在开发 Outlook 2007 VSTO 插件。我添加了一个带按钮的功能区。我正在尝试在按钮单击时引发事件。在 Application.Inspectors 集合的 NewInspector 事件上,我应该能够在 Presenter 中连接到此功能区事件。

问题是如何获得打开的检查员功能区。我试过Globals.Ribbons.MyRibbon 这样做。奇怪的是它只适用于第一个检查员。我也试过Globals.Ribbons[inspector].MyRibbon

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

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

【问题讨论】:

    标签: vsto mvp outlook-2007 outlook-addin ribbon


    【解决方案1】:

    答案是付出了很多努力..

    据我所知,ribbon 不是通过 vsto 或 com interop 暴露的,它也是无状态的,所以无论显示多少个检查器,ribbon 都会加载一次。

    我花了很长时间才优雅地解决这个问题,而且它是相当复杂的代码。我还应该提到,我选择使用功能区 XML 而不是设计器来解决这个问题,我发现设计器过于严格。

    它的核心是你必须创建一个自定义的 IRibbonExtensibility 实现,然后在功能区 XML 中重写回调,这样它们就会回调到你的 IRibbonExtensibility impl 上的方法。 然后,您必须处理加载的事件和新的检查器事件,以便将两者联系起来。

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

    如果您正在为 VSTO 构建 MVP 框架,请给我留言,我很想看看您在做什么。

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 2012-10-25
      • 2018-05-07
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      相关资源
      最近更新 更多