操作窗格概述
操作窗格是附加到特定 Microsoft 办公室 Word 文档或Microsoft 办公室 Excel 工作簿的可自定义文档操作任务窗格。 操作窗格托管在办公室任务窗格中,以及其他内置任务窗格,例如 Excel 中的“XML 源”任务窗格或 Word 中的“样式和格式”任务窗格。 可使用 Windows 窗体控件或 WPF 控件来设计操作窗格用户界面。
适用于: 本主题中的信息适用于 Excel 和 Word 的文档级项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。
可以只在文档级自定义项中为 Word 或 Excel 创建一个操作窗格。 不能在 VSTO 外接程序中创建操作窗格。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。
注意
操作窗格不同于自定义任务窗格。 自定义任务窗格与应用程序(而不是特定文档)相关联。 你可以在 VSTO 外接程序中为某些 Microsoft Office 应用程序创建自定义任务窗格。 有关详细信息,请参阅 “自定义任务”窗格。
显示操作窗格
操作窗格表示为ActionsPane 类。 当你创建文档级项目时,通过使用项目中 ThisWorkbook
(针对 Excel)或 ThisDocument
(针对 Word)类的 ActionsPane
字段向你的代码提供此类的实例。 若要显示操作窗格,请将 Windows 窗体控件添加到 ActionsPane
字段的 Controls 属性。 下列代码示例将名为 actions
的控件添加到操作窗格。
一旦显式向其添加控件,操作窗格就会在运行时变为可见。 显示操作窗格后,可根据用户的操作动态添加或删除控件。 通常情况下,你将添加代码以在 ThisDocument
或 ThisWorkbook
的 Startup
事件处理程序中显示操作窗格,从而使操作窗格在用户首次打开文档时可见。 但是,你可能只想根据文档中的用户操作来显示操作窗格。 例如,你可能回向文档上控件的 Click
事件添加代码。
向操作窗格添加多个控件
向操作窗格添加多个控件时,应将用户控件中的控件分组,然后将用户控件添加到 Controls 属性。 此过程包括下列步骤:
通过将操作窗格控件或用户控件项添加到项目来创建操作窗格的用户界面(UI)。 这两项均包含自定义 Windows 窗体 UserControl 类。 “操作窗格控件”和“用户控件”项等效;唯一的区别在于其名称。
通过使用设计器或编写代码,将 Windows 窗体控件添加到 UserControl。
注意
还可以通过将 WPF UserControl 添加到 Windows 窗体 UserControl来将 WPF 控件添加到操作窗格。 有关详细信息,请参阅办公室解决方案中使用 WPF 控件。
将自定义用户控件的实例添加到项目中
ThisWorkbook
(针对 Excel)或ThisDocument
(针对 Word)类的ActionsPane
字段中所内含的控件。有关更详细地演示此过程的示例,请参阅 “如何:向 Word 文档或 Excel 工作簿添加操作”窗格。
隐藏操作窗格
虽然 ActionsPane 类具有 Hide 方法和 Visible 属性,但不可通过使用 ActionsPane 类本身的任意成员从用户界面删除操作窗格。 Hide调用该方法或将属性设置为 Visible false 仅隐藏操作窗格上的控件;它不隐藏任务窗格。
若要隐藏解决方案中的任务窗格,可使用以下几个选项:
对于 Word,请将 Visible 表示“文档操作”任务窗格的对象属性 TaskPane 设置为 false。 计划从项目的
ThisDocument
类中运行下列代码示例。对于 Excel,请将DisplayDocumentActionTaskPaneApplication对象的属性设置为 false。 计划从项目的
ThisWorkbook
类中运行下列代码示例。对于 Word 或 Excel,也可以将表示任务窗格的命令栏的属性设置为 Visible false。 计划从项目的
ThisDocument
或ThisWorkbook
类中运行下列代码示例。
打开文档时清除操作窗格
当用户在操作窗格可见时保存文档时,每次打开文档时都会显示操作窗格,无论操作窗格是否包含任何控件。 如果想在显示此窗格时进行控制,请调用 ThisDocument
或 ThisWorkbook
的 Startup
事件处理程序中 ActionsPane
字段的 Clear 方法,以确保操作窗格在文档打开时不可见。
确定操作窗格何时关闭
操作窗格关闭时没有引发事件。 虽然 ActionsPane 类具有 VisibleChanged 事件,但在最终用户关闭操作窗格时不会引发此事件。 相反,当操作窗格上的控件通过调用方法或将属性设置为 Visible false 来隐藏时Hide,将引发此事件。
当用户关闭操作窗格时,用户可以通过在应用程序的用户界面(UI)中执行以下过程之一来再次显示它。
通过使用 Word 或 Excel 的 UI 来显示操作窗格
在功能区上,单击“ 视图 ”选项卡。
在“显示/隐藏”组中,单击“文档操作”切换按钮。
程序操作窗格事件
你可以将多个用户控件添加到操作窗格,然后编写代码,以便通过显示和隐藏用户控件对文档上的事件做出响应。 如果将 XML 架构元素映射到文档,则在每次插入点位于其中一个 XML 元素的内部时都可在操作窗格中显示某些用户控件。 有关详细信息,请参阅 How to: Map schemas to Word documents inside Visual Studio and How to: Map schemas to worksheets inside Visual Studio.
你还可以编写代码以响应任意对象的事件,包括主机控件、应用程序或文档事件。 有关详细信息,请参阅 演练:针对 NamedRange 控件的事件进行编程。
将数据绑定到操作窗格上的控件
操作窗格上控件的数据绑定容量等于 Windows 窗体上控件的容量。 你可以将控件绑定到数据集、类型化数据集和 XML 等数据源。 有关详细信息,请参阅数据绑定和Windows 窗体。
可以将操作窗格上的控件和文档上的控件绑定到同一数据集。 例如,可以在操作窗格上的控件和工作表上的控件之间创建主/从关系。 有关详细信息,请参阅 演练:将数据绑定到 Excel 操作窗格上的控件。
验证操作窗格控件中的数据
如果在操作窗格上控件的 Validating 事件处理程序中显示一个消息框,则可能在焦点从控件移动到消息框上时再次引发该事件。 若要避免此问题,请使用 ErrorProvider 控件来显示任意验证错误消息。
用户控制堆叠顺序
如果你正在使用多个用户控件,则无论用户控件是垂直停靠还是水平停靠,你都可以编写代码以在操作窗格上堆叠这些控件。 可以使用 StackOrder 属性的 StackStyle 枚举来设置操作窗格上用户控件的堆叠顺序。 有关详细信息,请参阅 “如何:管理操作窗格上的控件布局”。
StackOrder 属性可以接受下列 StackStyle 枚举值。
堆叠样式 | 定义 |
---|---|
FromBottom | 从操作窗格底部堆叠。 |
FromLeft | 从操作窗格左侧堆叠。 |
FromRight | 从操作窗格右侧堆叠。 |
FromTop | 从操作窗格顶部堆叠。 |
无 | 未定义堆叠顺序;由开发人员控制顺序。 |
下列代码将设置 StackOrder 属性,以从操作窗格顶部堆叠用户控件。
定位控件
如果用户在运行时调整操作窗格的大小,控件可以使用操作窗格调整大小。 你可以使用 Windows 窗体控件的 Anchor 属性将控件定位到操作窗格。 还可以相同方式将 Windows 窗体控件定位到用户控件上。 有关详细信息,请参阅 How to: Anchor controls on Windows 窗体。
调整操作窗格的大小
无法直接更改 ActionsPane 的大小,因为 ActionsPane 内嵌在任务窗格中。 但是,通过设置表示任务窗格的 CommandBar 的 Width 属性,即可以编程方式更改任务窗格的宽度。 无论任务窗格时水平停靠的还是浮动的,都可更改它的高度。
不建议以编程方式调整任务窗格的大小,因为用户应能够选择最适合其需求的任务窗格大小。 但是,如果你必须调整任务窗格的宽度,可以使用下列代码来完成此任务。
重新定位操作窗格
无法直接重新定位 ActionsPane,因为它内嵌在任务窗格中。 但是,通过设置表示任务窗格的 CommandBar 的 Position 属性,即可以编程方式移动任务窗格。
不建议以编程方式重新定位任务窗格,因为用户应能够选择最适合其需求的屏幕上的任务窗格位置。 但是,如果你必须将任务窗格移动到特定位置,可以使用下列代码来完成此任务。
注意
最终用户可随时手动重新定位任务窗格。 无法确保任务窗格将始终停靠在你以编程方式指示的位置。 但是,你可以检查方向更改,并确保操作窗格上的控件以正确的方向堆叠。 有关详细信息,请参阅 “如何:管理操作窗格上的控件布局”。
Top设置和Left属性ActionsPane不会更改其位置,因为对象ActionsPane嵌入到任务窗格中。
如果任务窗格未停靠,则可设置表示任务窗格的 CommandBar 的 Top 和 Left 属性。 下列代码将未停靠的任务窗格移动到文档的左上角。
if (this.CommandBars["Task Pane"].Position ==
Microsoft.Office.Core.MsoBarPosition.msoBarFloating)
{
this.CommandBars["Task Pane"].Top = 0;
this.CommandBars["Task Pane"].Left = 0;
}