传播的英文动词:细品RibbonX(6):初识RibbonX

来源:百度文库 编辑:中财网 时间:2024/05/02 13:16:02
当初次看到Office 2007时,您会立即注意到界面中没有了菜单和工具栏,这是Office2007最大的改变之一,使用功能区替换了菜单和工具栏。您可能意识到自定义用户界面也变得更加困难,其实设置功能区并不会像您想像的那样困难,因为Microsoft也意识到必须有一种方式供开发者或最终用户定制功能区,所以设计了RibbonX,即功能区的可编程机制。
事实上,正如前面几节所述,功能区具有很多老式界面无法比拟的优势。下面,让我们先简单地认识什么是RibbonX,以及看看如何自定义Office 2007功能区。

RibbonX是什么
在早期版本的Office中,CommandBars对象模型能使开发者在他们的自定义Office应用程序中创建丰富的解决方案。Microsoft在充分了解传统用户界面定制的优缺点后,在Office 2007用户界面扩展中引入了一种创新的模型,可以增强用户体验。新的用户界面定制使用可扩展的标识语言(XML)和几种传统的编程语言之一来操纵组成用户界面的组件。
功能区(Ribbon)是Office 2007应用程序界面的一部分,而RibbonX是指为自定义的应用程序来创建功能区元素(组件)的编程接口。通过使用RibbonX编程接口,定义如何在应用程序中显示功能区。
RibbonX使用的XML是简单易懂的,并不需要深入学习和理解XML。RibbonX也依赖至少一个命名空间,而URL定义了指定的RibbonX条目如何工作的位置。通常,您并不需要知道关于命名空间的太多信息,只需要将其包含在RibbonX代码的适当位置。
在设计自定义功能区时,使用XML定义功能区并在文件格式中存储为自定义部分。当打开文档时,自动读取XML部分并将定制应用到功能区中。无论何时关闭文档,总会自动删除其功能区定制,因此除了自动加载的加载项外,对特定文档的功能区定制不会影响其他文档。
功能区(Ribbon)的每个元素在RibbonX编程接口中都有相应的元素,用户只能看到由代码修改后的结果。与以前版本的Office不同,RibbonX不依赖于一组层次对象来控制界面。相反,界面取决于描述不同元素的XML文件,该文件遵守下面的XML层次:

  • 选项卡(Tabs)
  • 组(Groups)
  • 控件(Controls)

RibbonX的层次是相当绝对的。一个选项卡不能包含另外的选项卡,仅能包含组。同样,控件能够放置在组中,而不能直接放置在选项卡中。本系列文章将会详细介绍如何创建良好的功能区界面,本文只是对这方面的内容作简单介绍,让大家能够初步认识RibbonX。

Office 2007 UI定制模型概览
下图为Office 2007 UI定制模型示意:

RibbonX代码
RibbonX代码是XML代码,遵守Microsoft提供的XML架构。根据维基百科的解释,“XML是描述数据的一种方式,一个XML文件也可以包含数据”。要定制Office Ribbon UI,需要使用XML描述每件事情,所有关于尺寸、位置、可见性、标签、ID等等,习惯于在代码中指定这些操作的开发者应在RibbonX XML格式中指定。
Ribbon应用程序
所选择的Ribbon应用程序(Access、Excel、Outlook、PowerPoint或Word)将读取RibbonX代码并应用到自已的UI中。RibbonX代码通过文档或者模板,或者COM加载项来提供。嵌入RibbonX代码到Office 2007文件格式(Open XML)文档或模板中,是供用户或VBA开发者所选择的方法。
对使用这种新模型的开发者来说,仅仅有一次机会提供RibbonX代码。这意味着,一个加载项可以装载Ribbon定制一次,通常是在启动时。在加载项执行期间修改Ribbon仅在一种有限的方式内是可能的。即在大多数静态情况下,开发者可以指定UI。当卸载加载项时,或者带有RibbonX代码的文档/模板关闭时,通过RibbonX提供的UI修改也将删除。这与以前的Office版本中的CommandBars模型相反,因为在CommandBars模型中,开发者必须确保所有的UI定制被正确地删除。
加载项
如果仅仅想要为某文档或模板提供一个定制的Ribbon,那么只需使用Microsoft已经提供的功能。然而,如果您想添加自已的功能,例如,正开发一个加载项,并且要在Ribbon中使用该项功能,那么必须要在VBA或COM加载项中嵌入“回调”。
在RibbonX代码中,指定这些回调。回调是加载项代码里的函数,Office在某些条件下调用这些函数。回调与事件有些类似,但不相同。例如,可以指定一个回调,当想知道特定的控件是否可见时通过Office来调用。或者,更像事件,当用户单击添加到Ribbon中的自定义按钮时,与这项操作相关的回调将被执行。也可以指定一个回调,使Office获取控件的标签。

认识RibbonX的关键元素
选项卡(Tabs)
在功能区层次中,选项卡是最上层的元素,如下图1所示,有一个名为“我的选项卡”的自定义选项卡,它包含一个名为“我的组”的组,其中包含一个名为“我的按钮”的按钮。

图1:一个简单的自定义选项卡
通常,创建自定义选项卡用来集中完成某项特定的任务。创建图1所示的自定义选项卡的XML文件如下:

    

这是一个具有所有通用功能的标准的XML文件,包含处理指令、根元素(customUI)、子元素(ribbon)如以及属性。并且,必须为自定义界面定义命名空间,这里,命名空间存在于http:// schemas.microsoft.com/office/2006/01/customui,这是为每个所创建的自定义界面元素使用的位置。
创建一个新选项卡所需要做的只是编写带有id属性和label属性的元素,使用id属性从应用程序访问该选项卡,而label属性则是用户看到的选项卡的文本。
组(Groups)
组将相似的控件集中在一起,使用户不需要花太多的时间查找正确的控件。使用组减少了用户的困惑,并更容易地向用户展示如何执行一项特定的任务。例如,在Excel中想要设置字体时,有一个“字体”组,包含设置字体类型、大小、加粗、背景、边框等,而不需要逐个查找每个命令。
在上图1中,有一个“我的组”,仅包含有一个控件。在XML中通过使用元素创建组,必须包括id属性,以便在代码中标识该组,以及label属性,用来提供用户在界面中所看到的识别该组的文本。
控件(Controls)
一个控件执行一项特定的任务。例如,可以使用按钮控件帮助用户执行某任务,可以使用复选框让用户作出选择,也可以使用下拉列表框让用户在多个选项中选择而不是简单地选择“是/否”。
控件有多个大小。大尺寸的控件吸引用户注意,执行主要的任务,而小尺寸的控件则帮助用户执行不常用的任务。
控件总是需要比其它功能区元素更多的代码,因为它们不是静态的,它们执行某项任务。在上文所示的XML清单中,简单的button元素需要多个参数,除了如前所述的元素一样,必须提供id属性和label属性。当按钮包括图像时,图像也必须出现在引用它的文件里,而size属性定义了按钮的大小。绝大多数按钮也包括onAction属性,以执行与按钮相关的代码。当用户单击按钮时,触发onAction事件。