如何将Blazor组件注入自研TabControl

How to inject Blazor Components into self developed TabControl

我发现了一个非常简单的视频,我用它设法在 Blazor 中构建了一个 TabControl。或多或少它是一个很棒的模板。

YouTube 视频可以在这里找到:https://www.youtube.com/watch?v=EMWfM3_v0J4

但我现在想做的是用它构建一个组件。我想知道如何从外部插入其他组件?

我想在我的 Blazor 代码中执行以下操作:

<TabControlComponent>
  <Component1 Title="..." />
  <Component2 ... />
  <Component3 />
  <Component4 />
  <Component5 />
</TabControlComponent>

我很清楚各个项目的标题在按钮上的显示方式。但是我不清楚如何从外部插入组件。

该组件的代码如下所示。

<div class="btn-group">

    @foreach (var item in types)
    {
        if (Array.IndexOf(types, item) == selected)
        {
            <button class="btn btn-primary">@item.Name</button>
        }
        else
        {
            <button class="btn btn-secondary" @onclick="() => selected = Array.IndexOf(types, item)">@item.Name</button>
        }
    }

</div>

@GetRenderFragment(types[selected]);

@code {

    RenderFragment GetRenderFragment(Type type)
    {
        RenderFragment rf = builder =>
        {
            builder.OpenComponent(0, type);
            builder.CloseComponent();
        };
        return rf;
    }

    int selected = 0;

    [Parameter]
    public ComponentBase[] Components { get; set; }

    Type[] types => Components.Select(c => c.GetType()).ToArray();

}

TabControlComponent.razor 代码中的这一行应包含组件数组

[Parameter]
public ComponentBase[] Components { get; set; }

在父组件中,您可以像这样定义组件数组

<TabControlComponent Components = @components>
</TabControlComponent>

@code{
ComponentBase[] components = {new component1, new component2, new component3};
}