外观
对话框
ui.Modal 在一个 *bool 为 true 时显示其函数构建的对话框,并使窗口 变暗;点击对话框外部或按 Escape 会将其设为 false。
go
if ui.Button(c, "Rename…").Clicked() {
app.renaming = true
}
ui.Modal(c, &app.renaming, func() {
ui.Text(c, "Rename").Bold()
if ui.TextInput(c, &app.name).AutoFocus().Submitted() {
app.renaming = false
}
ui.Row(c).Gap(8).Justify(ui.End).Children(func() {
if ui.Button(c, "Cancel").Clicked() {
app.renaming = false
}
if ui.PrimaryButton(c, "Rename").Clicked() {
app.rename()
app.renaming = false
}
})
})键盘
对话框会独占键盘:打开时它会夺取焦点,落在其中第一个可获得焦点的元素上, 除非其中某个元素主动请求了焦点(AutoFocus);Tab 会在其元素间循环,而 窗口上在对话框之外构建的快捷键会暂缓生效,因为对话框背后的内容处于不可 交互状态。关闭时,它会把焦点归还给原先拥有焦点的元素,比如打开它的那个 按钮。参见覆盖层。
保持打开
Dismissed 会报告因 Escape 或外部点击而关闭对话框的那一帧;必须保持 打开的对话框(例如有待保存的更改),可以在那时把 *bool 重新设为 true:
go
if ui.Modal(c, &app.editing, app.editor).Dismissed() && app.unsaved {
app.editing = true
}若要询问重要事项、带按钮且不因外部点击而关闭,请使用警报对话框。
不带外观
ui.DialogBase 是一个不带外观的对话框:其函数为覆盖窗口的遮罩设置样式 (遮罩将面板居中),为面板设置样式,并构建面板的内容:
go
ui.DialogBase(c, &app.open, func(backdrop, panel ui.Element) {
backdrop.Background(ui.RGBA(0, 0, 0, 0.5))
panel.Width(360).Padding(24).Radius(16).Background(t.Background)
ui.Text(c, "Welcome").FontSize(20).Bold()
})参见自定义控件。
无障碍
辅助技术会看到一个对话框,在其显示期间看不到其背后的任何内容。