多个窗口中的PowerPoint 2010自定义TaskPane

时间:2016-02-18 18:55:53

标签: c# .net vsto powerpoint office-addins

我正在为Microsoft PowerPoint 2010开发自定义任务窗格。我需要在多个应用程序窗口/演示文稿之间同步任务窗格。使用功能区上的切换按钮显示任务窗格。

由于PowerPoint 2010在不同的文档窗口中显示每个演示文稿(与2007不同),因此我需要为每个窗口单独创建一个任务窗格并同步它们。我已经关注了如何为多个应用程序窗口创建任务窗格的Microsoft tutorial,并且我使用CustomTaskPaneCollection.Add(UserControl, String, Object)方法来指定任务窗格应该与哪个应用程序窗口关联。在这种情况下,Object是任务窗格应与之关联的PowerPoint.DocumentWindow

出于某种原因,我的所有任务窗格都是在活动窗口中创建的,而不是我指定的窗口。例如,如果我打开3个PowerPoint演示文稿然后切换任务窗格,则所有三个任务窗格都将添加到活动窗口中。

这是我在按下切换按钮时用来添加任务窗格的代码:

public void AddAllTaskPanes()
{
   PowerPoint.DocumentWindows windows = Globals.ThisAddIn.Application.Windows;
   if(windows.Count > 0)
   {
      for (int i=1; i<=windows.Count; i++){
         PowerPoint.DocumentWindow window = windows[i];
         customTaskPane = this.CustomTaskPanes.Add(new UserControl1(), "My User Control", window);
         customTaskPane.Visible = true;
      }
   }
}

这似乎应该成功地将每个任务窗格添加到其指定的window,并且我无法弄清楚为什么所有任务窗格都与活动窗口相关联。我已经对这个问题进行了大量研究,但未能找到解决方案。我找到的最接近的是this question,但答案对应于PowerPoint 2007,而不是像问题引用那样的2010。

任何有关PowerPoint可能以这种方式表现的原因的任何见解都将非常感激。

1 个答案:

答案 0 :(得分:-1)

我从PresentationAfterOpen和PresentationAfterNew事件创建了TaskPanes,产生了相同的行为。

关于PresentationAfterOpen事件的注释,如果用户选择的文档已经打开,则事件仍然会被触发,因此您需要在创建新文档之前检查是否已为该文档创建了CustomTaskPane。

解决此问题的一种方法是在CustomPane中创建指向关联DocumentWindow的指针,并通过CustomTaskPaneCollection检查相关联的一个。