Modal

居中弹层,支持标题、图标、尺寸、自定义页脚与按住标题栏拖拽移动。

最后更新

说明

两种用法:① 页面内放 Modal,点遮罩 / ESC / 右上关闭触发 OnClose,由调用方 @bind-Visible 控制显隐;② 不引用组件,调用 UIService.ShowModal(new ModalModel),由 Container 中的全局 ModalHost 统一渲染与回收,Width 设像素宽、Size 用预设,正文既可用 ComponentBuilder 以代码动态创建组件(Content = b => b.Component(...).Build()),也可直接给 ChildContent 片段;UIService 维护模态栈,可层层叠加,model.Close() 关闭本层。

常见能力:

  • 三种尺寸 + 像素宽
  • 图标标题
  • 隐藏头部
  • 自定义页脚
  • 遮罩/ESC 关闭
  • UIService.ShowModal 代码弹窗
  • ComponentBuilder 动态正文
  • 模态栈叠加
  • 标题栏拖拽移动

用法

@* 方式一:页面内引用,双向绑定 *@
@if (open)
{
    <Modal Title="删除确认" Icon="alert"
           OnClose="@(() => open = false)">
        删除后不可恢复,确认继续?
        <Footer>
            <Button Text="取消" OnClick="@(() => open = false)" />
            <Button Kind="danger" Text="确认删除" OnClick="@Delete" />
        </Footer>
    </Modal>
}

@* 方式二:UIService 代码弹窗,正文动态创建组件 *@
var model = new ModalModel { Title = "编辑", Width = 480,
    Content = b => b.Component<MyForm>(new { Name = "张三" }).Build() };
model.Footer = @<Button Kind="primary" Text="保存" OnClick="@model.Close" />;
UI.ShowModal(model);

API 参数

参数 类型 默认值 说明
ChildContent RenderFragment null
Closable bool true 显示右上角关闭按钮。
Draggable bool true 是否可按住标题栏拖动弹窗(默认开):隐藏头部或设为 false 时不可拖。最大化态下自动失效。
EscClosable bool true ESC 关闭。(当前未接线,保留参数位)
Footer RenderFragment null 底部按钮。
HeaderHidden bool false 隐藏头部。
Icon string null 标题图标。
MaskClosable bool false 点击遮罩关闭。默认 false:点空白处不关闭,只认右上角 × 与底部的取消/关闭按钮—— 弹层里往往已经填了一半表单,误点一次空白就把输入丢掉代价太大。确需「点外面即关」的轻量弹窗再显式传 true。
Maximizable bool false 是否在标题栏显示「最大化 / 还原」按钮(默认关):字段繁多的编辑表单开启,让用户把弹窗撑满视口看全内容。
Message string null 正文提示语,配合 ChildContent 可同时使用。
OnClose EventCallback<bool> — 事件
Size string null 尺寸:sm / lg / xl / full。
Title string null 标题。
Visible bool true 取得或设置组件是否可见,默认为false。
VisibleChanged EventCallback<bool> — 事件 取得或设置组件可见性变化时的回调事件。
Class string null 取得或设置组件的CSS类名,用于自定义样式。
Disabled bool false 取得或设置组件是否禁用,默认为false。
Style string null 取得或设置组件的内联样式,用于自定义样式。

所有组件均继承 BaseComponent,除上表参数外还支持 Class、Style、Disabled、Visible。

微信公众号二维码 扫码关注公众号
QQ 交流群二维码 扫码加入 QQ 群