与 bars 类似,在 MDI 应用程序中,Ribbon 控件也支持 bar item 合并功能。 主 MDI 窗体和子 MDI 窗体可以包含自己的有特定 bar items 的 RibbonControls 和 RibbonStatusBars。 合并功能允许子 MDI 窗体的 RibbonControl 和状态栏被合并到主窗体的 RibbonControl 和状态栏中。 本主题提供了关于 Ribbon 合并的附加信息。
合并机制
在默认情况下,当最大化一个子 MDI 窗体时,RibbonControls 的合并机制被调用。 在这种情况下,子窗体中 RibbonControl 的所有 bar items 都被自动移动到主窗体的 RibbonControl 中,并且子窗体的 RibbonControl 被隐藏以节约空间。 当恢复子窗体为常规视图时,取消合并机制被调用。 在这种情况下,子窗体的 RibbonControl 变得可视,并且在 RibbonControls 内部的 bar items 的原有布局被恢复。
请参阅 如何: 合并 Ribbon 控件 获取示例。
自动化的合并/取消合并用于支持显示在 Ribbon 控件 中的 bar items。被显示在 Ribbon 状态栏 中的 Bar 命令不能被自动合并。 可以人工完成它的合并,在下面的 人工合并 小节进行描述。
使用主 MDI 窗体的 RibbonControl 的 RibbonControl.MdiMergeStyle 属性来指定何时调用合并机制及取消合并机制。 在下表中列示了可能的设置:
RibbonMdiMergeStyle 枚举值 | 说明 |
---|---|
Default | 与 OnlyWhenMaximized 选项相同。 |
OnlyWhenMaximized | 指明在子 MDI 窗体被最大化时调用合并机制。 当子窗体从最大化视图恢复时取消合并机制被调用。 |
Always | 指明在子 MDI 窗体被激活时始终调用合并机制。 当子窗体不活动时取消合并机制被调用。 |
Never | 指明合并机制不被调用。 |
- 把子窗体的 RibbonControl 的 页面 及其 页面组 合并到主窗体的 RibbonControl 中。
- 合并由 RibbonControls 的 RibbonControl.PageHeaderItemLinks 属性指定的页标头命令。
- 合并在 Ribbon 快速访问工具栏 内显示的命令。
- 隐藏子窗体的 RibbonControl。
- 激发 RibbonControl.Merge 事件,允许在合并期间执行额外的定制 (例如合并 Ribbon 状态栏)。
合并机制根据 Ribbon 元素的显示标题来组合它们。 如果子 RibbonControl 和主 RibbonControl 包含了有同一显示标题的页面,则它们的内容被合并在主 RibbonControl 内。 如果子 RibbonControl 页面的显示标题不匹配任何主 RibbonControl 页面,则该页面被追加到主 RibbonControl 的页面集合中。 对于 Ribbon 页面组,也采用相同的处理。
取消合并机制恢复主/子 RibbonControls 内的 bar links 的原有布局,并激发 RibbonControl.UnMerge 事件。 在此事件中,可以撤销已通过 RibbonControl.Merge 事件被执行的自定义。
注意: 在合并时,子 RibbonControl 的类别、页面和页面组的副本被添加到主 RibbonControl 中,而不是这些对象本身。 因此在 RibbonControls 已经被合并之后,不要通过被合并的子 RibbonControl 来访问被合并的对象。 而是使用 RibbonControl.MergedCategories、RibbonControl.MergedPages 和 RibbonPage.MergedGroups 属性,或者使用由 ribbon 类别和页面对象提供的 Merged... 属性。 例如要激活某个特定的已合并页面,则在 RibbonControl.MergedPages 或 RibbonPageCategory.MergedPages 集合中查找到它,并把它指派到 RibbonControl.SelectedPage 属性。
在合并期间,子 RibbonControl 的 bar items 也被复制。 该副本没有被添加到独立的集合中。 而是把它们直接添加到 RibbonPageGroup.ItemLinks、RibbonQuickAccessToolbar.ItemLinks、RibbonStatusBar.ItemLinks 和 RibbonControl.PageHeaderItemLinks 集合中。
人工合并
通过把 RibbonControl.MdiMergeStyle 属性设置为 Never,可以禁用自动合并功能。 在这种情况下,可以通过 RibbonControl.MergeRibbon 和 RibbonControl.UnMergeRibbon 方法人工合并/取消合并 RibbonControls。
注意,不支持把多个 RibbonControls 和 bars 合并到单个 RibbonControl/bar 中。
Links 合并类型
在合并期间,可以指定是否必须把子窗体的 RibbonControl/bar 的 bar items 添加到主 RibbonControl/bar 中 (这是默认的行为),是否必须替换父窗体上有同一标题的 items 或者只是隐藏它们。
要指定这些设置,可以使用子窗体的 bar items 的 BarItem.MergeType 属性。 在特殊情况下,父窗体的 bar items 的 BarItem.MergeType 属性可能也需要被修改,以获得所需的行为 (请参阅下表中举例说明的可用合并技术):BarItem.MergeType 属性值 | 说明 |
---|---|
Add | 指明子窗体的 bar item 将被添加到父窗体的 RibbonControl 或容器项中 (例如菜单)。 |
MergeItems | 此设置应用于容器项 ( BarCustomContainerItem 的子类)。
指明子窗体的容器项的子项应该与父窗体的容器项的子项进行合并。 对那些类型及 BarItem.Caption 与源 item 匹配的父窗体的容器项,仅当 BarItem.MergeType 属性也设置为 MergeItems 时,合并发生。 否则,子窗体的容器项将简单添加到父窗体的 RibbonControl 中 (类似于 Add 设置) |
Remove | 指明在合并期间,子窗体的 bar item 不添加到父窗体的 RibbonControl 中。
指明在合并期间,父窗体的 bar item 应从 RibbonControl 中移除。 |
Replace | 指明子窗体的 bar item 应替换父窗体的有相同 BarItem.Caption 的 item,但仅当父窗体 item 的 BarItem.MergeType 属性也设置为 Replace 时才进行替换。
如果在父窗体的 RibbonControl 中未找到那样的 item,则子窗体的 item 将简单添加到此 RibbonControl 中 (类似于 Add 设置)。 |
![]() |
---|
与常规的 bars 不同,BarItem.MergeOrder 属性不支持 RibbonControl 及 RibbonStatusBar 对象中的 bar items。 |