由于我想设计一些可重用的Blazor组件,希望它们具有以下功能:
假设我有一个自定义组件"MyComponent",在使用它时,我可以添加任何CSS属性:
<MyComponent Class="custom-css1 custom-css2">
some child content...
</MyComponent>
在MyComponent中,我通常会将一些常见的CSS属性固定到顶部包装器上,就像这样:
Translated to Chinese:在MyComponent中,我通常会将一些常见的CSS属性固定到顶部包装器上,就像这样:
<div class="fixed-css1 fixed-css2">
some child content...
</div>
这意味着我需要将两个CSS属性的部分组合在一起,以使最终的HTML像这样:
<div class="fixed-css1 fixed-css2 custom-css1 custom-css2">
some child content...
</div>
所以我想我应该有这个模式:
<div class="@Classes">
some child content...
</div>
@functions
{
[Parameter]
private string Class { get; set; } = "";
private string fixedClass = "fixed-css1 fixed-css2";
private string Classes
{
get
{
return $"{fixedClass} {Class}";
}
}
}
为了减少冗余代码,我可以创建一个基类,其包含一个受保护的 Class 属性,并让每个组件都继承自它,但我仍然无法避免在每个组件中编写相同的组合代码。 我希望有一些解决方案可以直接在我的基类中添加这些自定义 CSS,我想我可以通过覆盖 ComponentBase 类的 BuildRenderTree 方法来实现这一点:protected override void BuildRenderTree(RenderTreeBuilder builder)
{
base.BuildRenderTree(builder);
}
不幸的是,我已经尝试了所有手动构建的方法,但不知道如何完成。我不知道如何获取我的HTML元素(例如“div”)并向其添加其他CSS属性。
所有这些都是关于像 Vue 那样轻松实现的功能。在Vue代码中,我们肯定可以向组件添加任何属性,并将它们传递给组件中的第一个元素。
能否有人帮助我完成这个目标或给我一些建议?
@Classes
即可应用组合CSS。这实际上正是Blazor团队用来允许在表单输入控件上使用自定义CSS类的方法。 - Chris Sainty