在前面的一些文章中,我们已经介绍过定制功能区的代码。在详细探讨功能区各元素之前,我们将先了解完整的RibbonX代码结构、如何使用各类工具定制功能区、以及至关重要的XML知识。下面,让我们先看看完整的RibbonX代码结构。
如果忽略定义控件的XML元素,那么完整的RibbonX结构如下:
xmlns="http://schemas.microsoft.com/office/2006/01/customui" ...> > ... /> >...> > 可用于Office菜单中的任何控件类型 >> > > , or> 控件类型 >> > , or> 控件类型 > >> ... > ... > 所有控件类型 > > >> idMSO="TabSetChartTools"> ... > ... > 所有控件类型 > > > > > >
其中,省略号表示一个或多个可选的属性。可以看出,RibbonX代码结构是层次分明的。现在,让我们初步了解代码结构中的元素。
> 元素是XML的根容器,命名空间将其识别为RibbonX文档。> 元素用来重复利用内置控件。> 元素包含功能区中所有可以利用的元素。可以包含下列元素以控制功能区的相应部分。> 元素用来定制Office菜单。> 元素代表共享控件。> 元素代表文档控件。> 元素用来定制快速访问工具栏。> 元素表示选项卡的集合。> 元素创建选项卡。> 元素创建上下文选项卡。> 元素用来创建组。
下面,让我们使用Excel示例来看看完整的RibbonX结构能够实现的用户界面。
禁用命令
使用command元素能够重载命令或者禁用命令。例如,下面的XML禁用“保存”命令:
> idMso="FileSave" enabled="false" /> >
结果如图1所示:
图1:禁用“保存”命令,该命令已变灰
从头开始创建功能区
将ribbon元素的StartFromScratch属性设置为True,从而去除所有的功能区界面元素,然后从头开始设计功能区。其XML为:
startFromScratch="true">
在Office按钮菜单中添加自定义项
可以向Office按钮菜单中添加合适的自定义项。例如,下面的XML在Office按钮中添加按钮和菜单:
> > >
结果如图2所示:
图2:在Office按钮中添加项目
自定义快速访问工具栏(QAT)
当将ribbon元素的StartFromScratch属性设置为True后,我们可以在设计时重新自定义快速访问工具栏。例如,下面的XML在QAT中放置“字体”组合框和“边框”拆分按钮:
> > idMso="Font" /> >> idMso="BordersGallery" /> > >
其中sharedControls表示放置在其中的控件为共享控件,而documentControls表示放置其中的控件为文档控件(注意,周围带有边框)。结果如图3所示:
图3:自定义快速访问工具栏
自定义功能区
下面的XML在功能区中添加一个名为“Menu”的选项卡。
id="rxExcelVBA" label="Menu">
接着,使用下面的代码在该选项卡中添加组。
idMso="GroupInsertChartsExcel" />
上述代码添加内置的“图表”组。结果如下图4所示:
图4:在自定义选项卡“Menu”中添加“图表”组
id="rxAuditMisc" label="My Sample">
id="rxSortBox">
idMso="SortAscendingExcel" showLabel="false" />
idMso="SortDescendingExcel" showLabel="false" />
idMso="SortDialog" showLabel="false" />
>
idMso="Copy" />
idMso="PasteMenu" />
id="rxAuditMiscSeparator1" />
idMso="NameManager" />
idMso="ViewFreezePanesGallery" />
idMso="WindowSwitchWindowsMenuExcel" />
>
上述代码添加一个名为“My Sample”的自定义组,box元素用来组织控件的排列,separator元素用来放置分隔条。结果如图5所示:
图5:在自定义选项卡“Menu”中添加“My Sample”组,包含一些内置的功能
id="rxDemo" label="My Menu">
>
>
>
>
id="MySeparator" />
>
>
上述代码添加一个名为“My Menu”的组,其中放置了嵌套的层级菜单。结果如下图6所示:
图6:在自定义选项卡“Menu”中添加“My Menu”组,包含层级菜单
id="rxMyGroup" label="My Sample Group1">
id="rxSeparator1" />
>
上述代码添加一个名为“My Sample Group1”的组,其中放置了一些带有内置图像的控件并进行了合理布局。结果如下图7所示:
图7:在自定义选项卡“Menu”中添加的“My Sample Group1”组,包含一些带有内置图像的控件
id="rxMyGroup1" label="My Sample Group2">
imageMso="TranslationToolTip" id="MyToggleButton" size="large" label="Insert My Object"/>
id="rxSeparator2" />
id="AllowChanges" label="Allow Changes" />
id="ChooseDepartment" showLabel="true" label="Choose Department">
- id="Dept1" label="Shipping" />
- id="Dept2" label="Accounting" />
- id="Dept3" label="Engineering" />
>
id="ComboBox1" label="ComboBox">
- id="item1" label="one" imageMso="_1" />
- id="item2" label="two" imageMso="_2" />
- id="item3" label="three" imageMso="_3" />
>
>
上述代码添加一个名为“My Sample Group2”的组,其中包含切换按钮、复选框、组合框、下拉框,并添加了项目。结果如图8所示:
图8:在自定义选项卡“Menu”中添加的“My Sample Group2”组,包含切换按钮、复选框、下拉框和组合框,并在其中添加了选项
> idMso="TabSetChartTools" /> >
上述代码添加上下文选项卡,当选中工作表中的图表时,会出现“图表工具”选项卡,如图9所示:
图9:选中图表后出现“图表工具”上下文选项卡
完整的代码
上述示例完整的XML代码如下:
xmlns="http://schemas.microsoft.com/office/2006/01/customui"> > idMso="FileSave" enabled="false" /> >startFromScratch="true"> > > >> > idMso="Font" /> >> idMso="BordersGallery" /> > >> id="rxExcelVBA" label="Menu"> idMso="GroupInsertChartsExcel" /> id="rxAuditMisc" label="My Sample"> id="rxSortBox"> idMso="SortAscendingExcel" showLabel="false" /> idMso="SortDescendingExcel" showLabel="false" /> idMso="SortDialog" showLabel="false" /> >idMso="Copy" /> idMso="PasteMenu" /> id="rxAuditMiscSeparator1" /> idMso="NameManager" /> idMso="ViewFreezePanesGallery" /> idMso="WindowSwitchWindowsMenuExcel" /> >id="rxDemo" label="My Menu"> > > > >id="MySeparator" /> > >id="rxMyGroup" label="My Sample Group1"> id="rxSeparator1" /> >id="rxMyGroup1" label="My Sample Group2"> imageMso="TranslationToolTip" id="MyToggleButton" size="large" label="Insert My Object"/> id="rxSeparator2" /> id="AllowChanges" label="Allow Changes" /> id="ChooseDepartment" showLabel="true" label="Choose Department"> - id="Dept1" label="Shipping" />
- id="Dept2" label="Accounting" />
- id="Dept3" label="Engineering" />
>id="ComboBox1" label="ComboBox"> - id="item1" label="one" imageMso="_1" />
- id="item2" label="two" imageMso="_2" />
- id="item3" label="three" imageMso="_3" />
> > > >> idMso="TabSetChartTools" /> > > >
自定义Excel界面如图10所示:
图10:自定义的Excel界面
看起来代码较多,其实并不复杂,如果大家有疑问,先不要着急,有概念就行,后面我们将慢慢详细地讲解。
示例文档下载:
关注细品RibbonX系列,关注完美Excel.