我正在尝试创建一个简单的MS Word插件(主要用于探索功能)。插件添加了自定义任务窗格,并在功能区中添加了组。功能区控件包括一个用于控制自定义任务窗格可见性的复选框,以及一个用于打开文档的按钮。当我在MS Word中测试插件时,任务窗格正确显示,并且复选框正常工作。问题是,只要单击按钮并打开新文档,任务窗格就会隐藏,复选框不再控制任务窗格的可见性。出了什么问题?如何显示自定义任务窗格?
以下是插件的简单版本:
public partial class ThisAddIn
{
private MyUserControl _myUserControl;
private CustomTaskPane _myCustomTastPane;
private OpenFileDialog _dialog;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
_dialog = new OpenFileDialog { Filter = "Doc File (*.rtf)|*.rtf", RestoreDirectory = true };
_myUserControl = new MyUserControl();
_myCustomTastPane = this.CustomTaskPanes.Add(_myUserControl, "My Task Pane");
_myCustomTastPane.Visible = true;
Globals.Ribbons.MyRibbon.ShowPane.Click += ShowClicked;
Globals.Ribbons.MyRibbon.LoadDoc.Click += LoadFile;
}
private void ShowClicked(object sender, RibbonControlEventArgs ribbonControlEventArgs)
{
_myCustomTastPane.Visible = Globals.Ribbons.MyRibbon.ShowPane.Checked;
}
void LoadFile(object sender, RibbonControlEventArgs e)
{
if (_dialog.ShowDialog() != DialogResult.OK) return;
object missing = Missing.Value;
object myFalse = false;
object myTrue = true;
object format = WdSaveFormat.wdFormatRTF;
object fileToOpen = _dialog.FileName;
Application.Documents.Open(ref fileToOpen, ref myFalse, ref myFalse, ref myFalse, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref myTrue, ref myFalse, ref missing, ref missing, ref missing);
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
#region VSTO generated code
//....
#endregion
}
为了简单起见,我省略了功能区的定义,因为它实际上只是一个按钮和一个复选框。我也省略了MyUserControl的定义,因为类的内容并不重要(在我的演示版本中我只有一个带标签的简单类)。
答案 0 :(得分:6)
在MS Word中,自定义任务窗格是每个文档窗口(see MSDN Reference)。如果您打开一个新文档,任务窗格集合是不同的。如果要保持持久性任务窗格打开 - 您必须通过监视文档打开/关闭事件来自行管理它,如下所述。
为Word 2007或InfoPath 2007创建自定义任务窗格时,自定义任务窗格仅对单个文档可见。这些应用程序中的任务窗格与托管文档的窗口相关联,但每个文档的窗口都有不同的实例。
...
如果要显示多个文档的自定义任务窗格,可以在用户创建新文档或打开现有文档时创建自定义任务窗格的新实例。 例如,您可以为Word 2007加载项中的NewDocument
或DocumentOpen
事件创建处理程序,以创建使用new或已打开的自定义任务窗格的新实例文档。