热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

细品RibbonX(9):层次分明的RibbonX代码结构

在前面的一些文章中,我们已经介绍过定制功能区的代码。在详细探讨功能区各元素之前,我们将先了解完整的RibbonX代码结构、如何使用各类工具定制功能区、以及至关重要的XML知识。下面,

在前面的一些文章中,我们已经介绍过定制功能区的代码。在详细探讨功能区各元素之前,我们将先了解完整的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所示:
RibbonX9-1
图1:禁用“保存”命令,该命令已变灰
从头开始创建功能区
将ribbon元素的StartFromScratch属性设置为True,从而去除所有的功能区界面元素,然后从头开始设计功能区。其XML为:

     startFromScratch="true">

在Office按钮菜单中添加自定义项
可以向Office按钮菜单中添加合适的自定义项。例如,下面的XML在Office按钮中添加按钮和菜单:

        >
             id="rxOMBtn1" label="My Office Button1" />
             id="rxOMBtn2" label="My Office Button2" />
             id="MyOfficeMenu" label="My Office Menu">
                 id="rxSend1" label="My Menu1" />
                 id="rxSend2" label="My Menu2" />
                 id="rxSend3" label="My Menu3" />
                 id="rxSend4" label="My Menu4" />
                 id="rxSend5" label="My Menu5" />
                 id="rxSend6" label="My Menu6" />
                 id="rxSend7" label="My Menu7" />
                 id="rxSend8" label="My Menu8" />
                 id="rxSend9" label="My Menu9" />
            >
        >

结果如图2所示:
RibbonX9-2
图2:在Office按钮中添加项目
自定义快速访问工具栏(QAT)
当将ribbon元素的StartFromScratch属性设置为True后,我们可以在设计时重新自定义快速访问工具栏。例如,下面的XML在QAT中放置“字体”组合框和“边框”拆分按钮:

        >
            >
                 idMso="Font" />
            >
            >
                 idMso="BordersGallery" />
            >
        >

其中sharedControls表示放置在其中的控件为共享控件,而documentControls表示放置其中的控件为文档控件(注意,周围带有边框)。结果如图3所示:
RibbonX9-3
图3:自定义快速访问工具栏
自定义功能区
下面的XML在功能区中添加一个名为“Menu”的选项卡。

             id="rxExcelVBA" label="Menu">

接着,使用下面的代码在该选项卡中添加组。

                 idMso="GroupInsertChartsExcel" />

上述代码添加内置的“图表”组。结果如下图4所示:
RibbonX9-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所示:
RibbonX9-5
图5:在自定义选项卡“Menu”中添加“My Sample”组,包含一些内置的功能

                 id="rxDemo" label="My Menu">
                     id="rxMenu" label="Menu" imageMso="ReviewCompareMenu" size="large">
                         id="subMenu1" label="SubMenu1">
                             id="subMenu11" label="3-SubMenu1">
                                 id="rxMenu11" label="Up" imageMso="OutlineMoveUp" />
                                 id="rxMenu12" label="GoTo" imageMso="GoTo" />
                                 id="rxMenu13" label="Down" imageMso="OutlineMoveDown" />
                            >
                        >
                         id="subMenu2" label="SubMenu2">
                             id="subMenu21" label="3-SubMenu2">
                                 id="rxMenu21" label="Up" imageMso="OutlineMoveUp" />
                                 id="rxMenu22" label="GoTo" imageMso="GoTo" />
                                 id="rxMenu23" label="Down" imageMso="OutlineMoveDown" />
                            >
                        >
                         id="MySeparator" />
                         id="rxMenuButton" label="Button" />
                    >
                >

上述代码添加一个名为“My Menu”的组,其中放置了嵌套的层级菜单。结果如下图6所示:
RibbonX9-6
图6:在自定义选项卡“Menu”中添加“My Menu”组,包含层级菜单

                 id="rxMyGroup" label="My Sample Group1">
                     id="Button1" imageMso="HappyFace" size="large" label="BigButton" />
                     id="rxSeparator1" />
                     id="b1" imageMso="HyperlinkInsert" size="large" label="Surf the Net" onAction="surf"/>
                     id="b2" imageMso="HappyFace" label="Smile" onAction="smile"/>
                     id="b3" imageMso="FormatPainter" label="Paint" onAction="paint"/>
                     id="b4" imageMso="AutoFilterClassic" label="Filter" onAction="filter"/>
                >

上述代码添加一个名为“My Sample Group1”的组,其中放置了一些带有内置图像的控件并进行了合理布局。结果如下图7所示:
RibbonX9-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所示:
RibbonX9-8
图8:在自定义选项卡“Menu”中添加的“My Sample Group2”组,包含切换按钮、复选框、下拉框和组合框,并在其中添加了选项

        >
             idMso="TabSetChartTools" />
        >

上述代码添加上下文选项卡,当选中工作表中的图表时,会出现“图表工具”选项卡,如图9所示:
RibbonX9-9
图9:选中图表后出现“图表工具”上下文选项卡
完整的代码
上述示例完整的XML代码如下:

 xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    >
         idMso="FileSave" enabled="false" />
    >
     startFromScratch="true">
        >
             id="rxOMBtn1" label="My Office Button1" />
             id="rxOMBtn2" label="My Office Button2" />
             id="MyOfficeMenu" label="My Office Menu">
                 id="rxSend1" label="My Menu1" />
                 id="rxSend2" label="My Menu2" />
                 id="rxSend3" label="My Menu3" />
                 id="rxSend4" label="My Menu4" />
                 id="rxSend5" label="My Menu5" />
                 id="rxSend6" label="My Menu6" />
                 id="rxSend7" label="My Menu7" />
                 id="rxSend8" label="My Menu8" />
                 id="rxSend9" label="My Menu9" />
            >
        >
        >
            >
                 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="rxMenu" label="Menu" imageMso="ReviewCompareMenu" size="large">
                         id="subMenu1" label="SubMenu1">
                             id="subMenu11" label="3-SubMenu1">
                                 id="rxMenu11" label="Up" imageMso="OutlineMoveUp" />
                                 id="rxMenu12" label="GoTo" imageMso="GoTo" />
                                 id="rxMenu13" label="Down" imageMso="OutlineMoveDown" />
                            >
                        >
                         id="subMenu2" label="SubMenu2">
                             id="subMenu21" label="3-SubMenu2">
                                 id="rxMenu21" label="Up" imageMso="OutlineMoveUp" />
                                 id="rxMenu22" label="GoTo" imageMso="GoTo" />
                                 id="rxMenu23" label="Down" imageMso="OutlineMoveDown" />
                            >
                        >
                         id="MySeparator" />
                         id="rxMenuButton" label="Button" />
                    >
                >
                 id="rxMyGroup" label="My Sample Group1">
                     id="Button1" imageMso="HappyFace" size="large" label="BigButton" />
                     id="rxSeparator1" />
                     id="b1" imageMso="HyperlinkInsert" size="large" label="Surf the Net" onAction="surf"/>
                     id="b2" imageMso="HappyFace" label="Smile" onAction="smile"/>
                     id="b3" imageMso="FormatPainter" label="Paint" onAction="paint"/>
                     id="b4" imageMso="AutoFilterClassic" label="Filter" onAction="filter"/>
                >
                 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所示:
RibbonX9-10
图10:自定义的Excel界面
看起来代码较多,其实并不复杂,如果大家有疑问,先不要着急,有概念就行,后面我们将慢慢详细地讲解。
示例文档下载:

 

关注细品RibbonX系列,关注完美Excel.


推荐阅读
  • 短视频app源码,Android开发底部滑出菜单首先依赖三方库implementationandroidx.appcompat:appcompat:1.2.0im ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 本文主要介绍如何使用标签来优化Android应用的UI布局,通过减少不必要的视图层次,提高应用性能。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 本文介绍了一种利用Dom4j库和JFileChooser组件在Java中实现XML文件自定义路径导出的方法。通过创建一个Document对象并设置根元素,结合JFileChooser选择目标路径,实现了灵活的XML文件导出功能。具体步骤包括初始化Document对象、构建XML结构以及使用JFileChooser选择保存路径,确保用户能够方便地将生成的XML文件保存到指定位置。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
author-avatar
粅媞em亼啡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有