Blazor中继承MudTextField后如何手动渲染父组件的Razor代码
简介
我正在尝试扩展MudBlazor库中MudTextField<T>组件的功能。通常我会创建包装器组件实现扩展,但这次要修改的逻辑仅存在于受保护方法中,因此我选择直接继承MudTextField<T>组件,目标是创建一个克隆版本,仅在重写特定方法修改的功能上和原组件有差异。
继承的组件
我首先创建了CustomMudTextField<T>组件,代码如下:
CustomMudTextField.razor
@using System.Runtime.CompilerServices @using Microsoft.AspNetCore.Components.Rendering @using Microsoft.AspNetCore.Components.RenderTree @inherits MudTextField<T> @typeparam T @code { // 自定义逻辑已省略 }
这种写法的问题是基控件的内容不会被渲染,因此我尝试手动触发基类渲染,参考官方文档的实现思路调整了代码:
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(); } // 自定义逻辑已省略 }
我预期调整后的组件表现会和基组件完全一致,现在父组件的UI确实能正常渲染了,但所有基础功能都无法正常工作。
我也尝试过相关技术讨论中提到的方案,但下面的代码片段甚至无法通过编译:
@inherits BaseComponent @{ base.BuildRenderTree(__builder); }
那么我要如何渲染基控件的内容?
其他UI框架有专门用于渲染基控件的内置组件,我原本预期Blazor的实现会和@ChildContent机制类似,尽管二者是完全不同的概念。有没有办法继承并渲染MudTextField<T>,使其表现和原生组件完全一致?我到底遗漏了什么要点?
内容的提问来源于stack exchange,提问作者LuckyLikey
相关产品推荐
相关产品推荐

