如何将多个 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 主题的控件?的主要内容,如果未能解决你的问题,请参考以下文章

AS3 多个(影片剪辑按钮)为一个影片剪辑设置动画

如何访问 AS3 中的单选按钮组?

如何将 css 样式设置为 asp.net 按钮?

如何将 CssClass 应用于 DataGrid HyperLinkColumn 的标题单元格?

如何从前端将 ASP.net 下拉列表索引设置为 0

如何一次通过名称属性为多个元素设置值(ExtJs 4)