叠层与菜单
使用窗口级叠层栈构建可翻转弹层、嵌套模态焦点和完整键盘菜单。
言界 1.0 的菜单、下拉选择和弹出层共享窗口级叠层栈。叠层只存在于当前窗口的控件树、 事件和绘制路径中,不创建额外原生窗口;窗口关闭时会逆序清理全部叠层。
嵌套菜单
定 文件菜单 为 工具栏.菜单(【
{「标题」:「文件」,「快捷键」:「⌘N」,「子菜单」:【
{「标题」:「新建」},
{「标题」:「打开」,「快捷键」:「⌘O」}
】},
{「标题」:「退出」,「禁用」:假}
】);
文件菜单.监听(「选择」,处理选择);项目可以是文字或典。典支持标题、子菜单、快捷键、禁用、分隔、动作和
保持打开。快捷键字段只负责显示;应用级快捷键仍应调用窗口.快捷注册,菜单不会注册
系统全局快捷键。
输入在创建时完整校验:单层最多 1024 项、全部层最多 4096 项、深度最多 16,单个标题
最多 65536 个字符。无效输入以UI_MENU_*错误原子拒绝,不留下部分菜单。
放置、命中和焦点
弹层可选择上、下、左、右方向;首选方向空间不足时自动翻转,再按窗口视口夹取。窗口缩放 或根布局变化会重新计算位置。指针命中从最上层倒序进行,模态叠层会阻止事件落入背景树; 点击外部或按 Escape 可以关闭允许关闭的最上层。
嵌套模态叠层为每层建立焦点范围。Tab/Shift+Tab 只在当前范围循环,关闭后恢复到有效的 原焦点或下一个可聚焦控件。下拉选择、菜单和通用弹出层共用这一套边界,不应在应用中维护 第二套外部点击或焦点陷阱状态。
菜单键盘导航:Up/Down 在当前层循环,Home/End 跳到边界,Right 打开子菜单,Left 返回 父层,Enter/空格激活,Escape 关闭当前层或整个根菜单。禁用和分隔项目不会进入选择序列。
选择与无障碍
叶项目的选择事件包含当前序号、层级、规范化项目和从根到叶的索引路径。项目动作先于
选择事件执行;动作失败不会留下半激活层。
展开菜单以菜单、菜单项和分隔符角色生成语义子树,并声明点击、展开、折叠和聚焦
动作。辅助技术请求仍需携带当前树修订;言界会重新验证层级、可见、启用和项目身份。窗口
诊断只保存叠层数量、层级和边界摘要,不复制菜单文字或回调。
完整行为见 言界 1.0 叠层与菜单指南, 可运行代码见综合控件示例。