从代码更改 CSS 类 [英] Change CSS classes from code
问题描述
在代码隐藏中设置 CssClass
很容易,但这会冒覆盖现有类的风险.
It's easy to set CssClass
in the code-behind, but this runs the risk of overwriting existing classes.
我需要将某些元素设置为 ReadOnly = true;
并且我想应用一种样式作为项目无法更改的视觉提示......很容易:
I need to set certain elements to ReadOnly = true;
and I'd like to apply a style as a visual cue that the item cannot be altered...easy enough:
.CssClass += " ReadOnlyStyle";
但有时我会也需要将相同的元素更改为 ReadOnly = false;
这意味着我需要删除我设置的 CSS 类而不删除我可能指定的任何其他样式.
But at times I will also need to change the same element to ReadOnly = false;
which means that I will need to remove the CSS class that I set without removing any other styles that I might have assigned.
最好的方法是什么?
推荐答案
我已经把 AnthonyWJones 的原始代码修改为无论什么场景都可以使用:
I've taken AnthonyWJones original code and amended it so that it works no matter what scenario:
static class WebControlsExtensions
{
public static void AddCssClass(this WebControl control, string cssClass)
{
List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
classes.Add(cssClass);
control.CssClass = classes.ToDelimitedString(" ");
}
public static void RemoveCssClass(this WebControl control, string cssClass)
{
List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
classes.Remove(cssClass);
control.CssClass = classes.ToDelimitedString(" ");
}
}
static class StringExtensions
{
public static string ToDelimitedString(this IEnumerable<string> list, string delimiter)
{
StringBuilder sb = new StringBuilder();
foreach (string item in list)
{
if (sb.Length > 0)
sb.Append(delimiter);
sb.Append(item);
}
return sb.ToString();
}
}
这篇关于从代码更改 CSS 类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!