在 MDI 应用程序中,父和子 MDI 窗体都可以有自己的菜单和 bars。 父 MDI 窗体的菜单通常提供一般命令 (使用文件、窗口等),而子 MDI 窗体有提供特定功能的 bars 和菜单。 在默认情况下,bars 和菜单显示在相应的窗口中。 但是 XtraBars 允许合并父/子 MDI 窗体的 bars 和菜单(这取决您的特定需求),并把它们组合在父窗体内部。 本文档描述为达到此目的而由 XtraBars 提供的合并机制。
请参阅 Ribbon 合并 主题来获取关于在 MDI 应用程序中合并 Ribbon 控件的信息。
注意 |
---|
当保存/加载使用了合并功能的 bars 的布局时,请注意下列事项。 如果在已经合并时保存了 bars 的布局,则不要在 bars 已取消合并之后还加载此布局。 典型地,您需要保存和加载还未取消合并时的 bars 的布局。
|
合并机制
XtraBars 提供了合并分属于不同 BarManagers (不同的窗体) 的 bars 的功能。 在 MDI 应用程序中这是有用的。 假设 MDI 应用程序中的父/子窗体都有自己的 bars (菜单)。 在这种情况下,当某个子 MDI 窗体激活或最大化时,可能需要把
bar item links 从子窗体的 bar 中,添加到属于父窗体的某个 bar 中。 当合并发生也可以隐藏特定的 link,并且/或者使用子窗体的 bar links 来替换父窗体的 bar links。
XtraBars 支持自动合并/取消合并主菜单。 意思是如果父/子窗体都有主菜单,则当合并机制被调用时,它们的主菜单将被合并到父窗体的主菜单中。 其他 bars 只能通过接管 BarManager.Merge 事件来进行人工合并。 当合并机制发出请求时,此事件发生。
父窗体的 BarManager 的
BarManager.MdiMenuMergeStyle 属性确定合并/取消合并机制是否可以被调用。 在下表中列示了可能的设置:
BarManager.MdiMenuMergeStyle 属性值 |
说明 |
Always |
指明仅当子窗体被激活时合并机制被调用。 当子窗体不活动时取消合并机制被调用。 |
Never |
指明合并机制不被调用。 |
OnlyWhenChildMaximized |
指明当子 MDI 窗体最大化时合并机制被调用。 当子窗体从最大化视图恢复时取消合并机制被调用。 |
当合并机制被调用时,执行两项操作:
- 父/子 MDI 窗体的主菜单被自动合并 (子窗体的主菜单项被移动到父窗体中)
- BarManager.Merge 事件发生,允许您根据需要人工合并其他 bars。
在最近的合并操作之后,调用取消合并机制将恢复 bar links 的布局。 执行两项操作:
人工合并 Bar
Links 合并类型
在合并时,可以指定子窗体的 bar items 是否应被添加到父窗体的 bar 中 (这是默认的行为),是否应使用同样的标题来替换父窗体的 bar items,是否只从 bar 中移除或根本不考虑。
要指定这些设置,可使用子窗体需被合并的 bar item 的
BarItem.MergeType 属性。 注意,在特定情况下可能也需要修改父窗体 bar items 设置,来获得所需的行为 (请参阅下表,下表举例说明了可用的合并技术):
BarItem.MergeType 属性值 |
说明 |
Add |
指明子窗体的 bar item 应被添加到父窗体的 bar 或容器项中。 插入 item 的位置由目标 bar/容器项 内部 items 的 BarItem.MergeOrder 属性确定。 |
MergeItems |
此设置应用于容器项 ( BarCustomContainerItem 的子类)。
指明子窗体的容器项的子项应被合并到父窗体的容器项中。 对那些类型及 BarItem.Caption 与源 item 匹配的父窗体的容器项,仅当 BarItem.MergeType 属性也设置为 MergeItems 时,合并发生。 否则,子窗体的容器项将简单添加到父窗体的 bar 中 (类似于 Add 设置)。
|
Remove |
指明在合并操作期间,子窗体的 bar item 不应添加到父窗体的 bar 中。 此 item 将保留在子窗体的 bar 中。
指明在合并操作期间,父窗体的 bar item 应从 bar 中移除。
|
Replace |
指明子窗体的 bar item 应替换父窗体的有相同 BarItem.Caption 的 item,但仅当父窗体 item 的 BarItem.MergeType 属性也设置为 Replace 时才进行替换。
如果在父窗体的 bar 中未找到那样的 item,则子窗体的 item 将简单添加到此 bar 中 (类似于 Add 设置)。
|
在合并操作期间添加 items 时,根据 BarItem.MergeOrder 属性值来排列父 MDI 窗体的原 items 和子窗体的新 items。 MergeOrder 最小的 items 排列在第一项。 MergeOrder 值最大的项排列在最后面。 如果父窗体的 bar items 的 MergeOrder 与子窗体的 bar item 的 MergeOrder 相等,则子窗体的 item 将被放置在父窗体的所有相等项之后。
参阅