diff --git a/src/BootstrapBlazor/Components/Collapse/Collapse.razor b/src/BootstrapBlazor/Components/Collapse/Collapse.razor index a92f1529cbf..02ebd371af1 100644 --- a/src/BootstrapBlazor/Components/Collapse/Collapse.razor +++ b/src/BootstrapBlazor/Components/Collapse/Collapse.razor @@ -6,7 +6,7 @@ @CollapseItems - @foreach (var item in Children) + @foreach (var item in Items) {
@@ -16,7 +16,9 @@ @item.HeaderTemplate
} -
+
@if(!string.IsNullOrEmpty(item.Icon)) { diff --git a/src/BootstrapBlazor/Components/Collapse/Collapse.razor.cs b/src/BootstrapBlazor/Components/Collapse/Collapse.razor.cs index 48982a78148..55ea52e301f 100644 --- a/src/BootstrapBlazor/Components/Collapse/Collapse.razor.cs +++ b/src/BootstrapBlazor/Components/Collapse/Collapse.razor.cs @@ -20,7 +20,6 @@ public partial class Collapse .Build(); private static string? GetHeaderClassString(CollapseItem item) => CssBuilder.Default("accordion-header") - .AddClass("collapsed", item.IsCollapsed) .AddClass($"bg-{item.TitleColor.ToDescriptionString()}", item.TitleColor != Color.None) .AddClass(item.HeaderClass) .Build(); @@ -47,7 +46,7 @@ public partial class Collapse /// /// 获得/设置 CollapseItem 集合 /// - protected List Children { get; } = new(10); + protected List Items { get; } = new(10); /// /// 获得/设置 是否为手风琴效果 默认为 false @@ -69,6 +68,14 @@ public partial class Collapse private async Task OnClickItem(CollapseItem item) { + if (IsAccordion && item.IsCollapsed) + { + // 手风琴模式,设置其他项收起 + foreach (var i in Items.Where(i => i != item && !i.IsCollapsed)) + { + i.SetCollapsed(true); + } + } item.SetCollapsed(!item.IsCollapsed); if (OnCollapseChanged != null) { @@ -80,11 +87,11 @@ private async Task OnClickItem(CollapseItem item) /// 添加 CollapseItem 方法 由 CollapseItem 方法加载时调用 /// /// TabItemBase 实例 - internal void AddItem(CollapseItem item) => Children.Add(item); + internal void AddItem(CollapseItem item) => Items.Add(item); /// /// 移除 CollapseItem 方法 由 CollapseItem 方法 Dispose 时调用 /// /// TabItemBase 实例 - internal void RemoveItem(CollapseItem item) => Children.Remove(item); + internal void RemoveItem(CollapseItem item) => Items.Remove(item); } diff --git a/test/UnitTest/Components/CollapseTest.cs b/test/UnitTest/Components/CollapseTest.cs index cb421ee0d95..23811ce3027 100644 --- a/test/UnitTest/Components/CollapseTest.cs +++ b/test/UnitTest/Components/CollapseTest.cs @@ -33,7 +33,7 @@ public void Collapse_Ok() } [Fact] - public void Accordion_Ok() + public async Task Accordion_Ok() { var cut = Context.RenderComponent(pb => { @@ -53,8 +53,11 @@ public void Accordion_Ok() }); cut.Contains("is-accordion"); - var btn = cut.Find(".accordion-button"); - cut.InvokeAsync(() => btn.Click()); + var buttons = cut.FindAll(".accordion-button"); + await cut.InvokeAsync(() => buttons[0].Click()); + + buttons = cut.FindAll(".accordion-button"); + await cut.InvokeAsync(() => buttons[1].Click()); } [Fact]