操作窗格概述

操作窗格是一个可自定义的**“文档操作”任务窗格,它附加到特定 Microsoft Office Word 文档或 Microsoft Office Excel 工作簿。 它与其他内置任务窗格(比如 Excel 中的“XML 源”任务窗格或 Word 中的“样式和格式”**任务窗格)一起承载于 Office 任务窗格内。 可以使用 Windows 窗体控件或 WPF 控件来设计操作窗格用户界面。

**适用于:**本主题中的信息适用于以下应用程序的文档级项目:Excel 2007 和 Excel 2010;Word 2007 和 Word 2010。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

只能在 Word 或 Excel 的文档级自定义项中创建操作窗格。 您无法在应用程序级外接程序中创建操作窗格。 有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

提示

操作窗格不同于自定义任务窗格。 自定义任务窗格与应用程序相关联,而不是与特定文档相关联。 您可以为某些 Microsoft Office 应用程序的应用程序级外接程序创建自定义任务窗格。 有关更多信息,请参见自定义任务窗格概述

链接到视频 有关相关视频演示,请参见 How Do I: Use WPF Controls Inside an Excel Actions Pane?(如何实现:在 Excel 操作窗格中使用 WPF 控件?)。

显示操作窗格

操作窗格由 ActionsPane 类表示。 在创建文档级项目时,通过在项目中使用 ThisWorkbook 类(针对 Excel)或 ThisDocument 类(针对 Word)的 ActionsPane 字段,可以在代码中使用此类的实例。 若要显示操作窗格,请向 ActionsPane 字段的 Controls 属性中添加一个 Windows 窗体控件。 下面的代码示例将向操作窗格中添加一个名为 actions 控件。

Me.ActionsPane.Controls.Add(actions)
this.ActionsPane.Controls.Add(actions);

向操作窗格中显式添加控件后,该窗格将在运行时变为可见。 显示操作窗格之后,可以根据用户操作动态地添加或移除控件。 通常在 ThisDocument 或 ThisWorkbook 的 Startup 事件处理程序中添加代码,以显示操作窗格,使用户首次打开文档时就能看到操作窗格。 但是,您可能希望仅根据用户在文档中的操作来显示操作窗格。 例如,您可能会将代码添加到文档的控件的 Click 事件。

向操作窗格中添加多个控件

在向操作窗格中添加多个控件时,通常应将这些控件组织在一个用户控件中,然后再将该用户控件添加至 Controls 属性。 此过程包括下列步骤:

  1. 通过向项目中添加**“操作窗格控件”“用户控件”**项,创建操作窗格的用户界面 (UI)。 这两个项都包括一个自定义 Windows 窗体类 UserControl。 **“操作窗格控件”项与“用户控件”**项等效,只是名称不同而已。

  2. 通过使用设计器或编写代码,向 UserControl 中添加 Windows 窗体控件。

    提示

    此外,通过向 Windows 窗体 UserControl 中添加 WPF System.Windows.Controls.UserControl,还可以向操作窗格中添加 WPF 控件。 有关更多信息,请参见 在 Office 解决方案中使用 WPF 控件

  3. 在项目中,向包含在 ThisWorkbook 类(针对 Excel)或 ThisDocument 类(针对 Word)的 ActionsPane 字段中的控件添加该自定义用户控件的实例。

有关详细演示此过程的示例,请参见如何:向 Word 文档添加操作窗格如何:向 Excel 工作簿添加操作窗格

隐藏操作窗格

虽然 ActionsPane 类具有 Hide 方法和 Visible 属性,但使用 ActionsPane 类本身的任何成员均不能从用户界面中移除操作窗格。 调用 Hide 方法或将 Visible 属性设置为 false 仅会在操作窗格上隐藏控件;不会隐藏任务窗格。

若要在解决方案中隐藏任务窗格,您有以下几种选择:

  • 对于 Word,请将表示“文档操作”任务窗格的 TaskPane 对象的 Visible 属性设置为 false。 下面的代码示例需要从项目的 ThisDocument 类中运行。

    Me.Application.TaskPanes(Word.WdTaskPanes.wdTaskPaneDocumentActions).Visible = False
    
    this.Application.TaskPanes[Word.WdTaskPanes.wdTaskPaneDocumentActions].Visible = false;
    
  • 对于 Excel,请将 Application 对象的 DisplayDocumentActionTaskPane 属性设置为 false。 下面的代码示例需要从项目的 ThisWorkbook 类中运行。

    Me.Application.DisplayDocumentActionTaskPane = False
    
    this.Application.DisplayDocumentActionTaskPane = false;
    
  • 对于 Word 或 Excel,还可以将表示任务窗格的命令栏的 CommandBar.Visible 属性设置为 false。 下面的代码示例需要从项目的 ThisDocument 或 ThisWorkbook 类中运行。

    Me.Application.CommandBars("Task Pane").Visible = False
    
    this.Application.CommandBars["Task Pane"].Visible = false;
    

在打开文档时清除操作窗格

如果用户在该操作窗格可见时保存文档,则每次打开文档时该操作窗格均可见,无论该操作窗格是否包含控件。 如果要控制操作窗格在何时出现,请在 ThisDocument 或 ThisWorkbook 的 Startup 事件处理程序中调用 ActionsPane 字段的 Clear 方法,以确保在打开文档时不显示操作窗格。

确定操作窗格的关闭时间

关闭操作窗格时,不会引发任何事件。 虽然 ActionsPane 类具有 VisibleChanged 事件,但在最终用户关闭操作窗格时不会引发此事件。 而在通过调用 Hide 方法或将 Visible 属性设置为 false 来隐藏操作窗格上的控件时,将引发此事件。

最终用户在关闭操作窗格后,可通过在应用程序的用户界面 (UI) 中执行以下任意过程来重新显示该窗格。

使用 Word 或 Excel 的 UI 显示操作窗格

  1. 在功能区上,单击**“视图”**选项卡。

  2. 在**“显示/隐藏”组中,单击“文档操作”**切换按钮。

对操作窗格事件编程

可以向操作窗格添加多个用户控件,然后编写代码,通过显示和隐藏用户控件响应文档上的事件。 如果将 XML 架构元素映射到文档,每当插入点位于某个 XML 元素内部时,就可在操作窗格中显示特定的用户控件。 有关更多信息,请参见演练:根据用户上下文更改操作窗格如何:将架构映射到 Visual Studio 内部的 Word 文档如何:将架构映射到 Visual Studio 内部的工作表

还可以编写代码对任何对象的事件做出响应,包括宿主控件事件,应用程序事件或文档事件。 有关更多信息,请参见演练:根据 NamedRange 控件的事件进行编程

将数据绑定到操作窗格上的控件

操作窗格上的控件与 Windows 窗体上的控件具有相同的数据绑定功能。 可以将这些控件绑定到各种数据源,如数据集、类型化数据集和 XML。 有关更多信息,请参见 数据绑定和 Windows 窗体

可以将操作窗格上的控件和文档上的控件绑定到相同的数据集。 例如,可以创建操作窗格上的控件和工作表上的控件之间的主/从关系。 有关更多信息,请参见 演练:将数据绑定到 Excel 操作窗格上的控件

验证操作窗格控件中的数据

如果在操作窗格上的控件的 Validating 事件处理程序中显示消息框,当焦点从控件移动到消息框时,可能会再次引发该事件。 若要防止此问题,请使用 ErrorProvider 控件显示所有验证错误消息。

用户控件的放置顺序

如果正在使用多个用户控件,则可以编写代码以在操作窗格上恰当地放置用户控件(无论是垂直停靠还是水平停靠)。 通过使用 StackOrder 属性的 StackStyle 枚举,可以在操作窗格上设置用户控件的放置顺序。 有关更多信息,请参见如何:管理操作窗格上的控件布局

StackOrder 属性可以接受下列 StackStyle 枚举值。

放置方式

定义

FromBottom

从操作窗格底部开始放置。

FromLeft

从操作窗格左侧开始放置。

FromRight

从操作窗格右侧开始放置。

FromTop

从操作窗格顶部开始放置。

None

未定义放置顺序;由开发人员控制放置顺序。

以下代码将 StackOrder 属性设置为从操作窗格顶部开始放置用户控件。

Me.ActionsPane.StackOrder = Microsoft.Office.Tools.StackStyle.FromTop
this.ActionsPane.StackOrder = Microsoft.Office.Tools.StackStyle.FromTop;

锚定控件

如果用户在运行时调整操作窗格的大小,则控件可以随操作窗格调整大小。 可以使用 Windows 窗体控件的 Anchor 属性将控件锚定到操作窗格。 也可以按照同样的方式将 Windows 窗体控件锚定到用户控件上。 有关更多信息,请参见 如何:在 Windows 窗体上锚定控件

调整操作窗格的大小

由于 ActionsPane 嵌入在任务窗格中,所以无法直接更改 ActionsPane 的大小。 但是,可以通过设置表示任务窗格的 CommandBarWidth 属性以编程方式更改任务窗格的宽度。 如果任务窗格水平停靠或是浮动的,则可以更改它的高度。

通常不推荐以编程方式调整任务窗格的大小,因为用户应该可以在屏幕上选择最能满足其需要的任务窗格大小。 但是,如果必须调整任务窗格的宽度,则可以使用下面的代码完成此任务。

Me.CommandBars("Task Pane").Width = 200
this.CommandBars["Task Pane"].Width = 200;

重新定位操作窗格

由于 ActionsPane 嵌入在任务窗格中,所以无法直接对它重新定位。 但是,可以通过设置表示任务窗格的 CommandBarPosition 属性以编程方式移动任务窗格。

通常不推荐以编程方式重新定位任务窗格,原因是用户可以在屏幕上选择最能满足需要的任务窗格位置。 但是,如果必须将任务窗格移动到特定位置,则可使用下面的代码完成此任务。

Me.CommandBars("Task Pane").Position = _
    Microsoft.Office.Core.MsoBarPosition.msoBarLeft
this.CommandBars["Task Pane"].Position =
    Microsoft.Office.Core.MsoBarPosition.msoBarLeft;

提示

最终用户可随时手动重新定位任务窗格。 无法确保任务窗格一直停靠在以编程方式指示的位置。 但是,可以检查方向更改并确保操作窗格上的控件按正确方向进行放置。 有关更多信息,请参见 如何:管理操作窗格上的控件布局

设置 ActionsPaneTopLeft 属性不会更改其位置,因为 ActionsPane 对象是嵌入在任务窗格中的。

如果任务窗格未停靠,则可设置表示该任务窗格的 CommandBarTopLeft 属性。 下面的代码将未停靠的任务窗格移动到文档的左上角。

If Me.CommandBars("Task Pane").Position = _
    Microsoft.Office.Core.MsoBarPosition.msoBarFloating Then

    Me.CommandBars("Task Pane").Top = 0
    Me.CommandBars("Task Pane").Left = 0

End If
if (this.CommandBars["Task Pane"].Position == 
    Microsoft.Office.Core.MsoBarPosition.msoBarFloating)
{
    this.CommandBars["Task Pane"].Top = 0;
    this.CommandBars["Task Pane"].Left = 0;
}

请参见

任务

如何:向 Word 文档添加操作窗格

如何:向 Excel 工作簿添加操作窗格

演练:从操作窗格将文本插入到文档中

演练:将数据绑定到“Word 操作”窗格上的控件

演练:将数据绑定到 Excel 操作窗格上的控件

演练:根据用户上下文更改操作窗格

如何:管理操作窗格上的控件布局

概念

在 Office 解决方案中使用 WPF 控件

对 Office 项目中对象的全局访问

其他资源

Office UI 自定义