CssClass
在代码隐藏中设置很容易,但是存在覆盖现有类的风险.
我需要设置某些元素,ReadOnly = true;
并且我想将样式应用为视觉提示,该项目无法更改......很简单:
.CssClass += " ReadOnlyStyle";
但有时我还需要更改相同的元素,ReadOnly = false;
这意味着我将需要删除我设置的CSS类,而不删除我可能已分配的任何其他样式.
最好的方法是什么?
我已经采用了AnthonyWJones原始代码并对其进行了修改,以便无论在什么情况下它都能正常工作:
static class WebControlsExtensions { public static void AddCssClass(this WebControl control, string cssClass) { Listclasses = 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 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 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(); } }
在C#3中,您可以添加一些扩展方法.
static class WebControlsExtensions { public static void AddCssClass (this WebControl control, string cssClass) { control.CssClass += " " + cssClass; } public static void RemoveCssClass (this WebControl control, string cssClass) { control.CssClass = control.CssClass.replace(" " + cssClass, ""); } }
用法:-
ctl.AddCssClass("ReadOnly"); ctl.RemoveCssClass("ReadOnly");
请注意,RemoveCssClass旨在仅删除AddCssClass添加的那些类,并且具有添加2个附加类名的限制,最短名称不应与最长名称的开头完全匹配.例如,如果添加了"test"和"test2",则无法在不破坏CssClass的情况下删除测试.这可以通过RegEx得到改善,我希望上述内容足以满足您的需求.
请注意,如果您没有C#3,this
则从第一个参数中删除关键字,并以常规方式使用静态方法.