如何将多个 cssclass 名称设置为启用 ASP.NET 主题的控件?
Posted
技术标签:
【中文标题】如何将多个 cssclass 名称设置为启用 ASP.NET 主题的控件?【英文标题】:How to set multiple cssclass name to a control with ASP.NET theming enabled? 【发布时间】:2010-12-31 01:34:01 【问题描述】:CSS 支持多个类名:
<hwc:DropDownList ID="ddlRoomType" runat="server" class="invisible blue" EnableTheming="true" />
皮肤文件:
<%-- Default dropdown appearance --%>
<asp:DropDownList runat="server" CssClass="dropDownList" AutoPostBack="true"/>
而 asp.net 主题为我们提供了额外的蒙皮和属性抽象层。所以我说的是经典的 css 样式和 asp.net 主题组合的场景。
但是在启用 asp.net 主题化的情况下手动提供 CssClass(或类)属性时,您必须选择要覆盖另一个。
我们如何将手动输入的类名与 asp.net 主题创建的动态类名结合起来生成如下所示的 html 输出;
<select id="ctl00_Content_ddlRoomType" class="invisible blue dropDownList">
<option value="0">- Select Room -</option>
<option value="9">Single Room</option>
</select>
我找不到任何 .net 主题类来覆盖以实现另一个主题逻辑。 有任何想法吗?谢谢。
【问题讨论】:
【参考方案1】:标准运行时不支持组合 CSS 类。
但是,它应该很容易添加,使用控制适配器。您可以使用类似CssClass="+dropDownList"
的语法将类添加到任何现有的默认值。控制适配器会查找加号,并相应地设置CssClass
属性。
或者(并且可能更简单),您可以覆盖您感兴趣的现有类,并修改 CssClass
属性以按您的意愿工作。
【讨论】:
为了连接类名,首先我必须从下拉控件类中获取 CssClass 值(表达式如“dropdownlist+”)。但是在启用主题的模式下,即使在控件的 OnInit 事件中,我也只能获得替换的值(下拉列表)。主题事件在我猜的控件和页面类事件之前起作用并替换值。所以我需要在主题操作发生之前捕获一些事件。然后我可以轻松实施您的解决方案。谢谢。 您可以从切换到 StyleSheetTheme 而不是常规主题开始。前者允许您覆盖页面上的皮肤属性,后者则相反。您始终可以在页面上以编程方式设置 CssClass 属性。如我在回答中解释的那样,要使其自动化,您将需要一个控制适配器或派生类。以上是关于如何将多个 cssclass 名称设置为启用 ASP.NET 主题的控件?的主要内容,如果未能解决你的问题,请参考以下文章