65.9K
CodeProject 正在变化。 阅读更多。
Home

Microsoft Office 2007 风格 WPF C# 快速访问工具栏

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.35/5 (13投票s)

2008年2月7日

CPOL

5分钟阅读

viewsIcon

141979

downloadIcon

7176

一篇介绍快速访问工具栏的文章,它是 RibbonControl.dll 的一部分,如 Microsoft Office 2007 中所示。

以下代码与本文对应,但可能在WPF C# Ribbon 控件库中提供更最新的代码。本文中的当前代码版本为1.0.0.9

Quick Access Toolbar - 'Add to' menu

Quick Access Toolbar - Menu

Quick Access Toolbar - Customize

引言

本文介绍了快速访问工具栏 (QAT,发音为 c-a-t),它是更大项目WPF C# Ribbon 控件库的一部分。QAT 是 Microsoft Office 用户界面 (UI) 指南规定的必需组件。QAT 提供文档范围内的命令,无论当前功能区如何,始终只需单击一下即可访问。

重要信息:要使用此代码,您必须同意 Microsoft 制定的许可协议和指南。这些指南的一部分包括要求您必须拥有当前不属于此库的其他组件;我绝不暗示此库足以符合 Microsoft Office UI 许可的资格。确保您拥有这些其他组件是您的责任。通过下载源代码或使用源代码,您已同意遵循并遵守 Microsoft 要求的指南。

背景

"快速访问工具栏位于标题栏中,作为最常用功能的存储库,无论正在使用哪个应用程序,例如保存、撤消/重做和打印。快速访问工具栏完全可自定义,类似于以前 Office 版本中的工具栏。Office 应用程序中可用的任何命令都可以添加到快速访问工具栏,包括功能区和宏中不可用的命令。工具栏上任何命令的键盘快捷键也完全可自定义,类似于以前的 Office 版本。" --- 维基百科Microsoft Office 2007

Using the Code

使用此控件相对简单,并且不一定需要使用库 dll 中包含的 RibbonController(尽管推荐使用)。但请注意,使用此 QAT 的应用程序必须包含 Microsoft 指南中规定的所有必需 UI 元素,因此不允许单独使用此组件。

该控件有两个主要部分:一个按钮面板和一个下拉菜单。按钮面板包含添加到控件的所有快速访问按钮,并相应地调整大小以适应(包括边框和背景)。控件中的每个按钮都由 RibbonStyleHandler 自动设置样式,其行为与等效的功能区按钮完全相同,包括当用户单击按钮时,按钮单击会转换为适当的功能区控件。因此,转换后的 QAT 按钮单击只需处理一次,即由原始的 RibbonController / RibbonBar 代码处理。下拉菜单显示一个可添加到 QAT 的常用控件菜单,并提供对自定义对话框的访问(见下文)。

设置默认 QAT 项目

适用于使用库中包含的 RibbonController 的实现。

RibbonControlBase 类由所有 RibbonBar 及其子控件继承。RibbonControlBase 实现了一个属性 IsDefaultQuickAccessButton,当将其设置为 true 时,在有效的 QAT 对象上调用 .resetToDefault(RibbonController controller) 时,会自动生成的按钮会添加到 QAT。但请注意,具有 IsDefaultQuickAccessButton 属性的控件必须在调用 .resetToDefault(RibbonController controller) 之前作为 RibbonController 的子级(间接或直接)添加,否则该控件将不会被添加,直到用户通过自定义对话框重置 QAT。

设置默认 QAT 下拉菜单项目

适用于使用库中包含的 RibbonController 的实现。

IsDefaultQuickAccessButton 类似,可以使用 IsDefaultQuickAccessMenuButton 菜单属性设置下拉菜单中的默认项目;请注意,单击这些项目不会触发 clicked 事件,而是将它们添加到 QAT 按钮面板。

在运行时向 QAT 添加项目

这通常由用户通过右键单击并在任何 Ribbon 组件上选择“添加到快速访问菜单”来完成。虽然大部分是自动的,但 RibbonControllerQuickAccessToolbar 必须通过 RibbonControllerAddToQuickAccessToolbarEvent 链接。以下代码行必须放置在生成的事件处理程序中;

RibbonControlBase rcb = (RibbonControlBase)sender;
quickAccessToolbar.Buttons.Add(rcb.getQAButton());

但请注意,用户也可以通过自定义对话框向 QAT 添加按钮,但不需要代码来支持此功能。有必要捕获 RibbonControllerQuickAccessToolbarCustomiseQuickAccessToolbarEvent 事件,并在生成的事件处理程序中打开对话框。

QuickAccessToolBarConfigurationWindow w = 
              new QuickAccessToolBarConfigurationWindow(quickAccessToolbar, ribbonController);
w.HelpIconSource = new BitmapImage(new Uri(Environment.CurrentDirectory 
              + @"\\Standard Icons\help_icon.png", UriKind.RelativeOrAbsolute));
w.ConfigIconSource = new BitmapImage(new Uri(Environment.CurrentDirectory 
              + @"\\Standard Icons\config.png", UriKind.RelativeOrAbsolute));
w.ShowDialog();

QAT 自定义对话框

为了提高易用性(对最终用户和开发人员),提供了一个默认的自定义 QAT 对话框,它允许通过每个 RibbonBar 或每个 RibbonController 的所有命令列表简单地自定义 QAT。提供了用于从 QAT 添加和删除的控件,以及用于重新排序 QAT 成员的命令。该控件目前不支持文档特定的 QAT 配置,但这将在以后的版本中包含。该控件目前也不在应用程序运行之间保持状态。

关注点

RibbonControlBase 包含几个用于处理 QAT 按钮的有用方法;特别是 getQAButton()getQAButtons()getQAButton() 返回一个链接到控件的 QuickAccessButton;即,当控件上的图像更新时,按钮的图像也会相应更新,TextSubMenu 和单击事件也是如此。getQAButtons() 返回所调用的 RibbonControlBase 对象及其子级(递归)的所有有效 QuickAccessButton 列表;包括具有不寻常子级拓扑的子级(例如 RibbonThreeRowsLayout)。

已知bug

以下是我目前发现的错误列表;如果您发现其他错误,请留言;

  • RibbonGroupBox 最小化时,自定义列表错误地填充了其内容。

未来工作

以下任务仍在进行中或即将开始

  • 修复下拉菜单
  • 重新设置样式
  • 状态维护,包括每个文档状态

历史

版本 1.0.0.3 - 快速访问工具栏的初始构建。*

由 Microsoft Office UI 指南要求。

其他许可说明

请随意在您的工作中使用此内容,但请注意,正在使用修改后的Code Project 开放许可证 (CPOL);基本上它与标准许可证相同,只是未经事先授权,此代码不得用于商业或非营利性商业用途。请参阅随附的源代码和演示文件中的 license.txt 或 license.pdf。

© . All rights reserved.