diff --git a/src/BootstrapBlazor.Shared/Pages/Components/DialogBodyFoo.razor b/src/BootstrapBlazor.Shared/Pages/Components/DialogBodyFoo.razor new file mode 100644 index 0000000000000000000000000000000000000000..88d39b6febd57e014cb525b336887c110a7d9140 --- /dev/null +++ b/src/BootstrapBlazor.Shared/Pages/Components/DialogBodyFoo.razor @@ -0,0 +1 @@ +改变标题栏中下拉框此处会更改: @Value diff --git a/src/BootstrapBlazor.Shared/Pages/Components/DialogBodyFoo.razor.cs b/src/BootstrapBlazor.Shared/Pages/Components/DialogBodyFoo.razor.cs new file mode 100644 index 0000000000000000000000000000000000000000..52592c29503d1b4d01563b0093cbeed1108e2a39 --- /dev/null +++ b/src/BootstrapBlazor.Shared/Pages/Components/DialogBodyFoo.razor.cs @@ -0,0 +1,32 @@ +// Copyright (c) Argo Zhang (argo@163.com). All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Website: https://www.blazor.zone or https://argozhang.github.io/ + +using BootstrapBlazor.Components; + +namespace BootstrapBlazor.Shared.Pages.Components +{ + /// + /// + /// + public partial class DialogBodyFoo + { + private string? Value { get; set; } + + private List Items { get; } = new(new[] + { + new SelectedItem("beijing", "北京"), + new SelectedItem("shanghai", "上海") + }); + + /// + /// + /// + public Task UpdateAsync(string val) + { + Value = Items.First(i => i.Value == val).Text; + StateHasChanged(); + return Task.CompletedTask; + } + } +} diff --git a/src/BootstrapBlazor.Shared/Pages/Components/DialogHeaderFoo.razor b/src/BootstrapBlazor.Shared/Pages/Components/DialogHeaderFoo.razor new file mode 100644 index 0000000000000000000000000000000000000000..16d9ccccf1876463f2d143155ec133f64df2052d --- /dev/null +++ b/src/BootstrapBlazor.Shared/Pages/Components/DialogHeaderFoo.razor @@ -0,0 +1,4 @@ +自定义 Header + + + diff --git a/src/BootstrapBlazor.Shared/Pages/Components/DialogHeaderFoo.razor.cs b/src/BootstrapBlazor.Shared/Pages/Components/DialogHeaderFoo.razor.cs new file mode 100644 index 0000000000000000000000000000000000000000..4fd80a8e338ce3850781626dfe3e9e65c5f9e7a9 --- /dev/null +++ b/src/BootstrapBlazor.Shared/Pages/Components/DialogHeaderFoo.razor.cs @@ -0,0 +1,54 @@ +// Copyright (c) Argo Zhang (argo@163.com). All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Website: https://www.blazor.zone or https://argozhang.github.io/ + +using BootstrapBlazor.Components; +using Microsoft.AspNetCore.Components; +using System.Diagnostics.CodeAnalysis; + +namespace BootstrapBlazor.Shared.Pages.Components +{ + /// + /// + /// + public partial class DialogHeaderFoo + { + [NotNull] + private IEnumerable? Items { get; set; } + + /// + /// + /// + [Parameter] + public string? Value { get; set; } + + /// + /// + /// + [Parameter] + public Func? OnValueChanged { get; set; } + + /// + /// + /// + protected override void OnInitialized() + { + base.OnInitialized(); + + Items = new[] + { + new SelectedItem("beijing", "北京"), + new SelectedItem("shanghai", "上海") + }; + } + + private async Task OnSelectedItemChanged(SelectedItem item) + { + Value = item.Value; + if (OnValueChanged != null) + { + await OnValueChanged(Value); + } + } + } +} diff --git a/src/BootstrapBlazor.Shared/Pages/Samples/Dialogs.razor b/src/BootstrapBlazor.Shared/Pages/Samples/Dialogs.razor index 846bf873671b6202fdbd5ad32bf802b6e20ee02f..bf42b4416c567330ad9584f7587d8a57fe2f864f 100644 --- a/src/BootstrapBlazor.Shared/Pages/Samples/Dialogs.razor +++ b/src/BootstrapBlazor.Shared/Pages/Samples/Dialogs.razor @@ -15,7 +15,14 @@ 通过设置 DialogOption IsKeyboard 参数,开启弹窗是否支持 ESC,请点击后面按钮设置后再点击 弹窗 按钮测试效果 - 点击打开 Dialog + 点击打开 Dialog + + + + + + + diff --git a/src/BootstrapBlazor.Shared/Pages/Samples/Dialogs.razor.cs b/src/BootstrapBlazor.Shared/Pages/Samples/Dialogs.razor.cs index 82100b6dea250a651ea05601f23d672f61d94777..fa1818b0598aca76bb91ca8f97411ba2b5fdda4f 100644 --- a/src/BootstrapBlazor.Shared/Pages/Samples/Dialogs.razor.cs +++ b/src/BootstrapBlazor.Shared/Pages/Samples/Dialogs.razor.cs @@ -7,10 +7,7 @@ using BootstrapBlazor.Shared.Common; using BootstrapBlazor.Shared.Pages.Components; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Threading.Tasks; namespace BootstrapBlazor.Shared.Pages { @@ -36,6 +33,30 @@ namespace BootstrapBlazor.Shared.Pages IsKeyboard = !IsKeyboard; } + private async Task TriggerUpdateBodyAsync(string val) + { + if (BodyFooComponent != null) + { + await BodyFooComponent.UpdateAsync(val); + } + } + + private DialogBodyFoo? BodyFooComponent { get; set; } + + private Task OnCustomerHeaderClick() => DialogService.Show(new DialogOption() + { + HeaderTemplate = BootstrapDynamicComponent.CreateComponent(new KeyValuePair[] + { + new(nameof(DialogHeaderFoo.OnValueChanged), new Func(val => TriggerUpdateBodyAsync(val))) + }).Render(), + BodyTemplate = builder => + { + builder.OpenComponent(0); + builder.AddComponentReferenceCapture(1, obj => BodyFooComponent = (DialogBodyFoo)obj); + builder.CloseComponent(); + }, + }); + /// /// /// @@ -196,6 +217,13 @@ namespace BootstrapBlazor.Shared.Pages ValueList = " — ", DefaultValue = " — " }, + new AttributeItem() { + Name = "HeaderTemplate", + Description = "模态主体 ModalHeader 模板", + Type = "RenderFragment", + ValueList = " — ", + DefaultValue = " — " + }, new AttributeItem() { Name = "BodyTemplate", Description = "模态主体 ModalBody 组件", diff --git a/src/BootstrapBlazor.Shared/Pages/Samples/Modals.razor.cs b/src/BootstrapBlazor.Shared/Pages/Samples/Modals.razor.cs index 42e06b3a2814c1d7fe886b84c133c34b694ff7e6..cfa87c00e769e7a0f6f0ec494e32b726e4a5628d 100644 --- a/src/BootstrapBlazor.Shared/Pages/Samples/Modals.razor.cs +++ b/src/BootstrapBlazor.Shared/Pages/Samples/Modals.razor.cs @@ -56,6 +56,13 @@ namespace BootstrapBlazor.Shared.Pages { return new AttributeItem[] { + new AttributeItem() { + Name = "HeaderTemplate", + Description = "模态主体 ModalHeader 模板", + Type = "RenderFragment", + ValueList = " — ", + DefaultValue = " — " + }, new AttributeItem() { Name = "BodyTemplate", Description = "模态主体 ModalBody 组件", diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 1c8a3706f7dd945ac8d971c0aabe2b83449913ac..a5fdc5e14d80f77c56440589c5b33f9c31139293 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 5.6.0 + 5.6.1 diff --git a/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs b/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs index a29dda961d6029e7355e051f03b862aab0253468..4bdb38f852428e7b392d8be93b7a6397617991c9 100644 --- a/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs +++ b/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs @@ -77,6 +77,11 @@ namespace BootstrapBlazor.Components parameters.Add(new(nameof(ModalDialog.BodyTemplate), content)); } + if (option.HeaderTemplate != null) + { + parameters.Add(new(nameof(ModalDialog.HeaderTemplate), option.HeaderTemplate)); + } + if (option.FooterTemplate != null) { parameters.Add(new(nameof(ModalDialog.FooterTemplate), option.FooterTemplate)); diff --git a/src/BootstrapBlazor/Components/Dialog/DialogOption.cs b/src/BootstrapBlazor/Components/Dialog/DialogOption.cs index 65b83e40eb2ac802cb9098f169003242a58efa5d..eb268576bf5e7bf9f95d310d83046c85bb09cc9f 100644 --- a/src/BootstrapBlazor/Components/Dialog/DialogOption.cs +++ b/src/BootstrapBlazor/Components/Dialog/DialogOption.cs @@ -81,6 +81,11 @@ namespace BootstrapBlazor.Components /// public RenderFragment? FooterTemplate { get; set; } + /// + /// 获得/设置 ModalHeader 组件 + /// + public RenderFragment? HeaderTemplate { get; set; } + /// /// 获得/设置 自定义组件 /// diff --git a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor index 34750f4c9a0a388b5d5c8ca28a2b84942520a46a..986f6c93785e8279bc3e85797c6abf6b69b98677 100644 --- a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor +++ b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor @@ -2,30 +2,37 @@ @inherits BootstrapComponentBase - - - @Title - @if (ShowHeaderCloseButton) - { - - } - - - - @BodyTemplate - - @if (ShowFooter) - { - - } - - + + + @if (HeaderTemplate != null) + { + @HeaderTemplate + } + else + { + @Title + } + @if (ShowHeaderCloseButton) + { + + } + + + + @BodyTemplate + + @if (ShowFooter) + { + + } + + diff --git a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor.cs b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor.cs index 95b2708cb78ee06f4b30e1e8abacd54b317cab54..fe62c24950c30dfe943e2bd0e3dc876beb76cffc 100644 --- a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor.cs +++ b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor.cs @@ -109,6 +109,12 @@ namespace BootstrapBlazor.Components [Parameter] public RenderFragment? FooterTemplate { get; set; } + /// + /// 获得/设置 ModalHeader 组件 + /// + [Parameter] + public RenderFragment? HeaderTemplate { get; set; } + /// /// 获得/设置 关闭弹窗是回调委托 ///
通过设置 DialogOption IsKeyboard 参数,开启弹窗是否支持 ESC,请点击后面按钮设置后再点击 弹窗 按钮测试效果
DialogOption
IsKeyboard