Blazor:如何有条件地设置元素样式
Blazor: How to conditionally style an element
在 Blazor 中,我确实想使用条件设置输入元素的样式。这是我现在使用的代码,它可以工作,但后来我遇到了一个问题,因为这里使用了三个不同的输入元素。
@if (MyNumber > 100)
{ <input type="number" @bind=MyNumber @bind:event="oninput" /> }
else if (MyNumber < 1)
{ <input type="number" @bind=MyNumber @bind:event="oninput" style="color:red" /> }
else
{ <input type="number" @bind=MyNumber @bind:event="oninput" style="background:lightgreen" /> }
有没有更好的条件设置样式的可能性?
编辑:
感谢您的回答,肯定有几种可能的解决方案。我什至找到了另一个使用属性的:
<input type="number" @bind=MyNumber @bind:event="oninput" @attributes="SetStyle(MyNumber)" />
@code{
public Dictionary<string, object> SetStyle(int myNumber)
{
var dict = new Dictionary<string, object>();
if (myNumber > 100) { }
else if (myNumber < 1) dict.Add("style", "color:red");
else dict.Add("style", "background:lightgreen");
return dict;
}
您几乎可以在标记的任何位置放置变量,包括样式或 class 属性:
@{
string StyleString;
if (MyNumber < 1) StyleString = "color:red";
else if (MyNumber > 100) StyleString = "";
else StyleString = "background: lightgreen";
}
<input type="number" @bind=MyNumber @bind:event="oninput" style="@StyleString" />
@code {
int MyNumber { get; set; }
}
有很多方法可以做到,我会用:
<input style="@StyleForNumber(MyNumber)" type="number" @bind=MyNumber @bind:event="oninput" />
...
private string StyleForNumber(int n)
{
if (n > 100) return "";
if (n < 1) return "color:red";
return "background:lightgreen";
}
该功能可以重复使用并易于维护。
我可能会使用 Css 类 而不是直接样式。
在 Blazor 中,我确实想使用条件设置输入元素的样式。这是我现在使用的代码,它可以工作,但后来我遇到了一个问题,因为这里使用了三个不同的输入元素。
@if (MyNumber > 100)
{ <input type="number" @bind=MyNumber @bind:event="oninput" /> }
else if (MyNumber < 1)
{ <input type="number" @bind=MyNumber @bind:event="oninput" style="color:red" /> }
else
{ <input type="number" @bind=MyNumber @bind:event="oninput" style="background:lightgreen" /> }
有没有更好的条件设置样式的可能性?
编辑: 感谢您的回答,肯定有几种可能的解决方案。我什至找到了另一个使用属性的:
<input type="number" @bind=MyNumber @bind:event="oninput" @attributes="SetStyle(MyNumber)" />
@code{
public Dictionary<string, object> SetStyle(int myNumber)
{
var dict = new Dictionary<string, object>();
if (myNumber > 100) { }
else if (myNumber < 1) dict.Add("style", "color:red");
else dict.Add("style", "background:lightgreen");
return dict;
}
您几乎可以在标记的任何位置放置变量,包括样式或 class 属性:
@{
string StyleString;
if (MyNumber < 1) StyleString = "color:red";
else if (MyNumber > 100) StyleString = "";
else StyleString = "background: lightgreen";
}
<input type="number" @bind=MyNumber @bind:event="oninput" style="@StyleString" />
@code {
int MyNumber { get; set; }
}
有很多方法可以做到,我会用:
<input style="@StyleForNumber(MyNumber)" type="number" @bind=MyNumber @bind:event="oninput" />
...
private string StyleForNumber(int n)
{
if (n > 100) return "";
if (n < 1) return "color:red";
return "background:lightgreen";
}
该功能可以重复使用并易于维护。
我可能会使用 Css 类 而不是直接样式。