diff --git a/src/BootstrapBlazor.Shared/Components/Samples/Splits.razor b/src/BootstrapBlazor.Shared/Components/Samples/Splits.razor
index b7d22ff8126..29148b3f492 100644
--- a/src/BootstrapBlazor.Shared/Components/Samples/Splits.razor
+++ b/src/BootstrapBlazor.Shared/Components/Samples/Splits.razor
@@ -122,4 +122,24 @@
+
+
+
+
+
+ @Localizer["SplitsPanel1"]
+
+
+ @Localizer["SplitsPanel2"]
+
+
+
+
+
diff --git a/src/BootstrapBlazor.Shared/Components/Samples/Splits.razor.cs b/src/BootstrapBlazor.Shared/Components/Samples/Splits.razor.cs
index 155e4963e65..b5af87f4e30 100644
--- a/src/BootstrapBlazor.Shared/Components/Samples/Splits.razor.cs
+++ b/src/BootstrapBlazor.Shared/Components/Samples/Splits.razor.cs
@@ -52,6 +52,10 @@ private Task OnResizedAsync(SplitterResizedEventArgs args)
return Task.CompletedTask;
}
+ private Split Split1 = default!;
+
+ private Task OnSetLeft(string leftWidth) => Split1.SetLeftWidth(leftWidth);
+
///
/// 获得属性方法
///
diff --git a/src/BootstrapBlazor.Shared/Components/Samples/Splittings.razor b/src/BootstrapBlazor.Shared/Components/Samples/Splittings.razor
index ef4ead056a8..d943de1a5cb 100644
--- a/src/BootstrapBlazor.Shared/Components/Samples/Splittings.razor
+++ b/src/BootstrapBlazor.Shared/Components/Samples/Splittings.razor
@@ -39,13 +39,13 @@
Introduction="@Localizer["SplittingColumnsIntro"]"
Name="Columns">
diff --git a/src/BootstrapBlazor.Shared/Locales/en-US.json b/src/BootstrapBlazor.Shared/Locales/en-US.json
index b32e8193d6f..e6191fa36a2 100644
--- a/src/BootstrapBlazor.Shared/Locales/en-US.json
+++ b/src/BootstrapBlazor.Shared/Locales/en-US.json
@@ -1742,7 +1742,9 @@
"SplitsCollapsibleTrue": "Collapse button shown",
"SplitsCollapsibleFalse": "Collapse button hidden",
"SplitsFirstPaneMinimumSize": "The minimum size of the first pane supports any unit such as 10px 20% 5em 1rem. If no unit is provided, it defaults to px.",
- "SplitsSecondPaneMinimumSize": "The minimum size of the second pane supports any unit such as 10px 20% 5em 1rem. If no unit is provided, it defaults to px."
+ "SplitsSecondPaneMinimumSize": "The minimum size of the second pane supports any unit such as 10px 20% 5em 1rem. If no unit is provided, it defaults to px.",
+ "SplitSetLeftTitle": "Code to set panel width",
+ "SplitSetLeftIntro": "Use the component instance method SetLeftWidth to set the width of the left/top panel, and the width of the right/bottom panel will be adaptive"
},
"BootstrapBlazor.Shared.Components.Samples.Dropdowns": {
"Title": "Dropdown",
diff --git a/src/BootstrapBlazor.Shared/Locales/zh-CN.json b/src/BootstrapBlazor.Shared/Locales/zh-CN.json
index 137b52e0efd..11d41d27de7 100644
--- a/src/BootstrapBlazor.Shared/Locales/zh-CN.json
+++ b/src/BootstrapBlazor.Shared/Locales/zh-CN.json
@@ -1742,7 +1742,9 @@
"SplitsCollapsibleTrue": "显示调整按钮",
"SplitsCollapsibleFalse": "隐藏调整按钮",
"SplitsFirstPaneMinimumSize": "第一个窗格最小尺寸支持任意单位如 10px 20% 5em 1rem 未提供单位时默认为 px",
- "SplitsSecondPaneMinimumSize": "第二个窗格最小尺寸支持任意单位如 10px 20% 5em 1rem 未提供单位时默认为 px"
+ "SplitsSecondPaneMinimumSize": "第二个窗格最小尺寸支持任意单位如 10px 20% 5em 1rem 未提供单位时默认为 px",
+ "SplitSetLeftTitle": "代码设置面板宽度",
+ "SplitSetLeftIntro": "通过组件实例方法 SetLeftWidth 设置左侧/上侧面板宽度,右侧/下侧面板宽度自适应"
},
"BootstrapBlazor.Shared.Components.Samples.Dropdowns": {
"Title": "Dropdown 下拉菜单",
diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj
index 22686dd7d98..bb6d49653b5 100644
--- a/src/BootstrapBlazor/BootstrapBlazor.csproj
+++ b/src/BootstrapBlazor/BootstrapBlazor.csproj
@@ -1,7 +1,7 @@
- 9.1.3-beta03
+ 9.1.3-beta04
diff --git a/src/BootstrapBlazor/Components/Split/Split.razor.cs b/src/BootstrapBlazor/Components/Split/Split.razor.cs
index dcf06b7c31e..bbb9a263971 100644
--- a/src/BootstrapBlazor/Components/Split/Split.razor.cs
+++ b/src/BootstrapBlazor/Components/Split/Split.razor.cs
@@ -124,6 +124,13 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
IsKeepOriginalSize
});
+ ///
+ /// 设置左侧窗格宽度
+ ///
+ /// 可以是百分比或者其他单位
+ ///
+ public Task SetLeftWidth(string leftWidth) => InvokeVoidAsync("setLeft", Id, leftWidth);
+
///
/// 窗格折叠时回调方法 由 JavaScript 调用
///
diff --git a/src/BootstrapBlazor/Components/Split/Split.razor.js b/src/BootstrapBlazor/Components/Split/Split.razor.js
index 2d5b886458d..aaafa748e32 100644
--- a/src/BootstrapBlazor/Components/Split/Split.razor.js
+++ b/src/BootstrapBlazor/Components/Split/Split.razor.js
@@ -170,6 +170,13 @@ const getMax = split => {
return ret;
}
+export function setLeft(id, leftBasis) {
+ const split = Data.get(id)
+ if (split) {
+ split.splitLeft.style.setProperty('flex-basis', leftBasis);
+ }
+}
+
const setLeftBasis = (split, triggerLeft) => {
const { option, splitLeft, invoke, method } = split;
let leftBasis = splitLeft.style.flexBasis;
diff --git a/test/UnitTest/Components/SplitTest.cs b/test/UnitTest/Components/SplitTest.cs
index bde4e35c14f..718bd1ac76f 100644
--- a/test/UnitTest/Components/SplitTest.cs
+++ b/test/UnitTest/Components/SplitTest.cs
@@ -109,6 +109,17 @@ public async Task OnResizedAsync_Ok()
Assert.False(state.IsCollapsed);
}
+ [Fact]
+ public async Task SetLeft_Ok()
+ {
+ var cut = Context.RenderComponent(pb =>
+ {
+ pb.Add(b => b.FirstPaneTemplate, RenderSplitView("I am Pane1"));
+ pb.Add(b => b.SecondPaneTemplate, RenderSplitView("I am Pane2"));
+ });
+ await cut.InvokeAsync(() => cut.Instance.SetLeftWidth("25%"));
+ }
+
static RenderFragment RenderSplitView(string name = "I am Pane1") => builder =>
{
builder.OpenElement(1, "div");