介绍
我正在尝试MudTextField<T>
从mudblazor库扩展 的功能。通常我会创建一个包装器,但由于我要更改的行为仅在受保护的方法中可用,所以我选择继承MudTextField<T>
Component。目标是创建一个克隆,仅在我通过覆盖某些方法更改的功能上有所不同。
继承的组件
所以我创建了一个CustomMudTextField<T>
组件。
CustomMudTextField.razor
@using System.Runtime.CompilerServices
@using Microsoft.AspNetCore.Components.Rendering
@using Microsoft.AspNetCore.Components.RenderTree
@inherits MudTextField<T>
@typeparam T
@code
{
// omitted custom logic
}
问题在于,基本 Control 不再被渲染。所以我尝试手动渲染基类。我从docs中获得灵感。
CustomMudTextField.razor
@using System.Runtime.CompilerServices
@using Microsoft.AspNetCore.Components.Rendering
@using Microsoft.AspNetCore.Components.RenderTree
@inherits MudTextField<T>
@typeparam T
@CustomRender
@code
{
private RenderFragment CustomRender { get; set; }
private RenderFragment RenderBase() => builder =>
{
base.BuildRenderTree(builder);
};
protected override void OnInitialized()
{
base.OnInitialized();
CustomRender = RenderBase();
}
// omitted custom logic
}
我希望它可以像基本组件一样工作。现在父级的 UI 确实被渲染了,但基本功能根本不起作用。
我也尝试过这个 github issue中讨论的方法,但是下面的代码片段甚至不再编译了。
@inherits BaseComponent
@{
base.BuildRenderTree(__builder);
}
那么如何渲染基本控件的内容呢?
其他 UI 框架使用可用于呈现基本控件的组件。我希望这在某种程度上类似于 blazors @ChildContent mechanic,即使它是一个完全不同的概念。有没有办法继承和渲染MudTextField<T>
,使其行为完全相同?我错过了什么?