如果在任务窗格中使用 wpf 控件,则不会引发 NewInspector 和 Close 事件

NewInspector and Close event does not raise if wpf control used in task pane

我在任务窗格中使用 WPF 控件时遇到问题。我使用 ElementHost 添加了它。因此,如果我显示任务窗格,则 NewInspector 和检查器 Close 不会再出现。 这是我的代码

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab idMso="TabNewMailMessage">        
        <group label="MyGroup" id="mygroup">
          <button id="addItemBlabla"
                  size="large"                  
                  label="Add Items"
                  onAction="AddItemsClick"/>
        </group>        
      </tab>
    </tabs>
 </ribbon>
</customUI>

 //..Ribbon.cs file

 public void AddItemsClick(Office.IRibbonControl ribbonControl)
 {
    Inspector inspector = ribbonControl.Context as Inspector;
    if (this.taskPane == null)
    {
        this.taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new MyUserControlThatContainsWpfElementHost(), "Label", this.inspector);
    }

    this.taskPane.Visible = true;     
 }

 //.. ThisAddIn.cs file

  private void ThisAddIn_Startup(object sender, System.EventArgs e)
  {
       this.Application.Inspectors.NewInspector += this.Inspectors_NewInspector;            
  }

  private void Inspectors_NewInspector(Outlook.Inspector Inspector)
  {   
      //Does not work after task pane is shown!!!         
  }

更新 如果我在设计器中使用 Ribbon,则此示例有效,但我需要使用 XML version

我解决了我的问题。你可以在这里找到答案 https://social.msdn.microsoft.com/Forums/vstudio/en-US/73ea73da-8597-4152-938d-2ff99a82960f/newinspector-and-close-event-does-not-raise-if-wpf-control-used-in-task-pane?forum=vsto

我们需要在代码中添加 inspectors 字段:

 //..ThisAddIn.cs
 private Inspectors inspectors;

 private void ThisAddIn_Startup(object sender, System.EventArgs e)
 {
     this.inspectors = this.Application.Inspectors;
     this.inspectors.NewInspector += this.Inspectors_NewInspector;            
 }

 private void Inspectors_NewInspector(Outlook.Inspector Inspector)
 {   
      //Now this works!!!
 }