主题中的皮肤和样式表

来源:互联网 发布:淘宝卖家星级 编辑:程序博客网 时间:2024/05/29 08:34

一、加载主题(皮肤、样式表)的多种方式

除了在页面指令中采用Theme或者StylesheetTheme为单个页面加载主题外,还可以通过配置文件为多个页面批量加载主题,另外,还可以通过改变页面的Theme属性值动态加载主题,或者通过改变控件的SkinID属性值动态加载主题中的皮肤,或者通过改变控件的CssClass属性值动态加载主题中的样式表。

1、通过修改配置文件为多个页面批量加载主题

在配置文件里添加Theme或者StyleSheetTheme属性

<configuration>
  <
system.web>
    <!—<pages theme=”Theme_XP”/>-->
    <
pages styleSheetTheme="Theme_XP"/>
    </
system.web>
</
configuration>

此时配置文件目录下的所有页面都会自动加载改主题,但记得去掉Page指令里的Theme或者StyleSheetTheme属性,否则会重写配置文件的里的对应属性。

2、通过改变页面的Theme属性值动态加载主题

在页面的PreInit事件中可以动态加载主题,此时皮肤文件和样式表文件会同时被加载,但在该事件中不能够调用页面的控件,因为在此事件中,页面控件还未初始化。
<%@ PageLanguage="C#" Theme="DynamicTheme" %>

……
<ahref="DynamicTheme.aspx?theme=XP">Theme_XP</a>
<a href="DynamicTheme.aspx?theme=Win7">Theme_Win7 </a>

……
protected void
Page_PreInit(object sender,EventArgs e)
{
    Theme = "Theme_XP";
    if (Request["theme"] !=null)
    {
        switch (Request["theme"])
        {
            case "XP":
                Theme = "Theme_XP";
                break;
            case "Win7":
                Theme = "Theme_Win7";
                break;
        }
    }
}

3、通过改变控件的SkinID属性值动态加载主题中的皮肤

除了在页面的PreInit事件中动态加载主题外,还可以在PreInit事件中选择加载主题中的皮肤,但皮肤只能是命名皮肤。
<%@ PageLanguage="C#" Theme="DynamicCSS" %>
……
<a href="showdynamicskin.aspx?skin=professional">Professional</a>
<
a href="showdynamicskin.aspx?skin=colorful">Colorful</a>
……
protected void Page_PreInit(objectsender, EventArgs e)
{
    if (Request["skin"] !=null)
     { 
       switch (Request["skin"])
        {
            case "professional":
                grdMovies.SkinID = "Professional";
                break;
            case "colorful":
                grdMovies.SkinID = "Colorful";
                break;
        }
    }
}

4、通过改变控件的CssClass属性值动态加载主题中的样式表

除了动态加载主题外,还可以选择加载主题中的样式表。
样式表文件:App_Themes\DynamicCSS\GridView.CSS
.Professional td
{
    padding:4px;
    color:#333333;
    background-color:#F7F6F3;
}
.Professional .Header th
{
    padding:4px;
    background-color:#5D7B9D;
    font-weight:bold;
    color:White;
}
.Professional .Alternating td
{
    background-color:White;
    color:#284775;
}
.Colorful td
{
    padding:4px;
    color:#333333;
    background-color:#FFFBD6;
}
.Colorful .Header th
{
    padding:4px;
    background-color:#990000;
    font-weight:bold;
    color:White;
}
.Colorful .Alternating td
{
    background-color:White;
}

<%@ PageLanguage="C#" Theme="DynamicCSS" %>
……
<asp:GridViewid="grdMovies" Runat="server"  DataSourceID="srcMovies"GridLines="none"
HeaderStyle-CssClass="Header"
AlternatingRowStyle-CssClass="Alternating"/>

<asp:DropDownList
id="ddlCssClass"
Runat="server">
<
asp:ListItemText="Professional" />
<
asp:ListItemText="Colorful" />
</
asp:DropDownList>
……
protected void btnSubmit_Click(object sender, EventArgs e)
{
    grdMovies.CssClass = ddlCssClass.SelectedItem.Text;
}

 

二、禁用主题(皮肤、样式表)

当加载主题到页面后,因为某些原因需要禁用某个页面的主题,或者说禁用某个控件的主题,此时我们可以采用设置Theme或者StyleSheetTheme为空来完成。而设置EnableTheming为False禁用的只是主题中的皮肤。

禁用主题:设置Theme或者StyleSheetTheme为空来完成,或者创建一个空的主题文件,然后关联它。

禁用主题中的皮肤:当以Theme方式加载主题时,我们可以设置控件或者页面的EnableThemeing为False禁用主题中的皮肤。
 

三、Theme和StyleSheetTheme的异同

两者都可用来加载指定的主题,当主题中不包含皮肤文件时,两者效果一样,当主题中包含皮肤文件时,两者因优先级不一样会产生不一样的效果,优先级依次为:StyleSheetTheme->Page->Theme,后面的会重写前面的相同部分。

皮肤文件:App_Themes\Theme1\TextBox.skin
<%--TextBox默认皮肤--%>
<asp:TextBoxrunat="server" BackColor="Red"/>  
<%--TextBox命名皮肤1--%>
<asp:TextBoxrunat="server" BackColor="Yellow" SkinId="txtName"/>
<%--TextBox命名皮肤2--%>
<asp:TextBoxrunat="server" BackColor="Blue" SkinId="txtAge"/>

1、页面以Theme方式加载主题
<%@ PageLanguage="C#" AutoEventWireup="true" CodeFile="Default1.aspx.cs"Inherits="Default1" Theme="Theme1"%>
……
<form>
   
<div>
    <asp:TextBoxID="TextBox1" runat="server" BackColor="Black"></asp:TextBox>
    <
asp:TextBoxID="TextBox2 " runat="server" SkinID="txtName"BackColor="Black"></asp:TextBox>
    <
asp:TextBoxID="TextBox3" runat="server" SkinID="txtAge"></asp:TextBox>
    </
div>
</
form>

页面运行后的效果及生成的部分html代码如下,显然,主题中的皮肤文件TextBox.skin重写了页面中三个TextBox控件的相关皮肤属性BackColor,最终其值依次变成了Red,Bule,Yellow。
1
<input name="TextBox1" type="text" id="TextBox1" style="background-color:Red;" />

<input name="TextBox2" type="text" id="TextBox2" style="background-color:Yellow;" />

<input name="TextBox3" type="text" id="TextBox3" style="background-color:Blue;" />

2、页面以StylesheetTheme方式加载主题
<%@ Page Language="C#"AutoEventWireup="true"CodeFile="Default2.aspx.cs"Inherits="Default2"StylesheetTheme="Theme1"%>
……
<form>
   
<div>
    <asp:TextBoxID="TextBox1" runat="server" BackColor="Black"></asp:TextBox>
    <
asp:TextBoxID="TextBox2 " runat="server" SkinID="txtName"BackColor="Black"></asp:TextBox>
    <
asp:TextBoxID="TextBox3" runat="server" SkinID="txtAge"></asp:TextBox>
    </
div>
</
form>

页面运行后的效果及生成的部分html代码如下,显然,页面中前两个TextBox控件的相关皮肤属性BackColor重写了主题中的皮肤文件TextBox.skin,最终其值依次变成了Black,Black,Blue。
1
<input name="TextBox1" type="text" id="TextBox1" style="background-color:Black;" />

<input name="TextBox2" type="text" id="TextBox2" style="background-color:Black;" />

<input name="TextBox3" type="text" id="TextBox3" style="background-color:Blue;" />

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 五个多月宝宝拉鼻涕便怎么办 一岁宝宝拉鼻涕样大便怎么办 宝宝拉粘液大便鼻涕状的怎么办 十个月宝宝拉鼻涕一样大便怎么办 7个月宝宝咳嗽反反复复发热怎么办 婴儿3个月突然不吃奶瓶怎么办? 2个月婴儿突然不肯用奶瓶怎么办 喝母乳的宝宝不喝奶瓶怎么办 三个月宝宝不喝奶瓶母乳不够怎么办 七个多月的宝宝不吃辅食怎么办 婴儿光认奶粉不认母乳怎么办 宝宝11个月断奶不吃奶瓶怎么办 4个月的宝宝断奶不肯吃奶瓶怎么办 晚上磨牙齿把牙神经磨坏怎么办 喝母乳的宝宝不喝奶粉怎么办 我宝宝的牙齿长的不整齐怎么办? 宝宝5个月了母乳不够吃怎么办 4个月宝宝母乳不够吃怎么办 11个月宝宝只吃母乳怎么办 10个月宝宝突然不吃母乳怎么办 2个月宝宝咳嗽怎么办是吃母乳的 九个月宝宝不喜欢吃粥和米糊怎么办 9个月宝宝突然不吃辅食怎么办 宝贝8个月不吃辅食怎么办 11个月宝贝不吃辅食怎么办 十一个月宝宝长牙不吃辅食怎么办 八个多月的宝宝不爱吃辅食怎么办 7个月的宝宝不爱吃辅食怎么办 宝宝只吃母乳不吃辅食怎么办 10个月的宝宝不肯吃勺子怎么办 十一个月大宝宝不吃奶吃饭怎么办 十一个月宝宝光吃奶不吃饭怎么办 20个月宝宝爱吃奶不爱吃饭怎么办 宝宝8个多月不肯米糊跟粥怎么办 8个月宝宝突然不肯吃米糊了怎么办 八个月宝宝突然不吃辅食怎么办 八个月宝宝拉屎费劲还干怎么办 两个月的小孩不喜欢吃奶粉怎么办 三个多月的宝宝不爱吃奶怎么办 4个月的宝宝不吃奶怎么办 九个月宝宝一直高烧不退怎么办