您的位置:首页 > Web前端 > CSS

.NET主题样式 的应用和注意事项(超重要)

2012-01-12 11:00 288 查看
原文地址:理论上上来说,不同的主题中的样式表和SKIN文件的结构都应该是完全相同的。
3)设置你要应用主题的控件的css样式名为css中定义的样式名(比如column、gradient)
设置你要应用主题的服务器控件的SkinId为Skin文件中定义的skinid(比如login、create等),这样在Skin中定义的控件属性会自动附加到当前的控件上(内部也是使用CSS实现的)
4) 应用主题,有三种办法
全局主题:在Web.config中<system.web>中添加<pagesStyleSheetTheme="ThemeName"/>节,这样在整个应用中都会自动应用名为ThemeName的主题
页面主题:在ASPX文件顶部加入:<%@ Page Language="C#"StylesheetTheme=" ThemeName "%>,这样当前页面都会应用名为ThemeName的主题,或者在ASPX_CS中加(Page_Load方法)入如下代码 Page.StyleSheetTheme = “ThemeName”;
角色主题:需要使用masterpage 来辅助实现,通过User.IsInRole(“RoleName”)来判断用户是否属于某个角色,然后决定使用何种主题(Page.StyleSheetTheme =“ThemeName”);当然,使用这种办法还可以应用用户选择的主题
如果你仍然感觉迷惑,请查看 Quick Start 。
(二) 工作原理
不同的主题和皮肤之间的不同主要是页面和页面中的控件的样式(包括字体、段落、背景、边框等等)、部分图片的不同。
传统的完全使用CSS来表现不同的主题的方案,在处理图片和图片按钮的地方往往心有余而力不足。而在aspnet2.0里面一切都已经变得简单。
主题和皮肤是 dotnetframework2.0内建支持的,服务器控件添加了SkinId属性,Page类也添加了Theme和 StyleSheetTheme属性,其目的就是优雅的支持Skin。在应用指定了主题之后,相关的页面会自动链接位于主题目录下的css文件和skin文件,css的用法跟传统的用法没有什么区别,而skin文件则以一种类似于css的方式工作,指定了SkinId的服务器控件会自动从skin文件中加载并附加匹配的属性或样式(最常用的是Image和ImageButton的ImageUrl属性,这样做可以使页面在不同的主题下)---这是在服务器端完成的。由于skin文件在使用后是缓存在内存中的,所以效率不会有问题。
(三) Theme 和 StylesheetTheme 的区别
基本上,本文前面所有的 StyleSheetTheme 都可以替换为 Theme,我猜想区别是使用 Theme 时位于主题文件夹中的样式表(CSS)文件不会被应用到主题中,但是根据我的测试,发现两种情况下生成的页面中,只有<linkhref=’’>这一节的位置不同,一个出现在<Title>标记前面,一个则是后面。
(四) 优雅之处
a)完全Framework内建的支持、不再需要复杂的编程,甚至不再需要编程;
b)在vs2005中有非常友好的设计时支持,也就是说,在设计的时候你就可以看到某种主题的效果;
c) 学习曲线很平缓,如果你熟悉CSS的话,则更加没有难度。

-----------------
a、页面里相同的控件使用不同的样式:在该控件后面加skinID
b、把定义好的theme应用到整个页面:在该页的Page页签里加上属性theme=“theme名称”
c、把定义好的theme应用到整个站点:在web.config文件system.web的配置节中加上<pagestheme="theme名称">
d、动态的更换站点的样式(主题、皮肤):在Page_PreInit事件中写代码,Page.Theme= "...";
e、控件中应用样式的优先级:a、StyleSheetTheme引用的风格[优先级最低]

b、代码设定的控件属性(覆盖StyleSheetTheme)

c、Theme引用的风格(覆盖前面2个) [优先级最高]
f、让某个控件不应用theme里面定义的风格:更改属性EnableTheming=false即可
141 /**//// <summary>

142 /// 获取当前的表达式对所选列进行排序

143 /// </summary>

144 protected void SearchSortexpression_r(string[] sortColumns,string sortColumn, out string sortOrder, out int sortOrderNo)

145 {

146 sortOrder = "";

147 sortOrderNo = -1;

148 for (int i = 0; i < sortColumns.Length; i++)

149 {

150 if (sortColumns[i].StartsWith(sortColumn))

151 {

152 sortOrderNo = i + 1;

153 if (AllowMultiColumnSorting)

154 {

155 sortOrder =sortColumns[i].Substring(sortColumn.Length).Trim();

156 }

157 else

158 {

159 sortOrder = ((SortDirection == SortDirection.Ascending) ? "ASC": "DESC");

160 }

161 }

162 }
164 /**//// <summary>

165 /// 绘制升序降序的图片

166 /// </summary>

167 protected void DisplaySortOrderImages(string sortExpression,GridViewRow dgItem)

168 {

169 string[] sortColumns =sortExpression.Split(",".ToCharArray());

170

171 for (int i = 0; i < dgItem.Cells.Count; i++)

172 {

173 if (dgItem.Cells[i].Controls.Count > 0 &&dgItem.Cells[i].Controls[0] is LinkButton)

174 {

175 string sortOrder;

176 int sortOrderNo;

177 string column =((LinkButton)dgItem.Cells[i].Controls[0]).CommandArgument;

178 SearchSortexpression_r(sortColumns, column, out sortOrder, outsortOrderNo);

179 if (sortOrderNo > 0)

180 {

181 string sortImgLoc = (sortOrder.Equals("ASC") ? SortAscImageUrl: SortDescImageUrl);

182

183 if (sortImgLoc != String.Empty)

184 {

185 Image imgSortDirection = new Image();

186 imgSortDirection.ImageUrl = sortImgLoc;

187 dgItem.Cells[i].Controls.Add(imgSortDirection);

189 }

190 else

191 {

192

193 if (AllowMultiColumnSorting)

194 {

195 Literal litSortSeq = new Literal();

196 litSortSeq.Text = sortOrderNo.ToString();

197 dgItem.Cells[i].Controls.Add(litSortSeq);

198

199 }

200 }

201 }

202 }

203 }

204

205 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: