个人感觉Theme主题没多大用处
1.首先里面的skin文件支持的是服务器控件的外观设置,可一般开发人员或者美工设计的界面都是html+css的,并没有几个人对服务器控件的那些外观属性很熟悉,而且那些控件那么多,每新出一个新的服务器控件都要去熟悉它的那些外观属性吗。
2.在App_Themes里定义的css文件虽然通过<%@ Page Language="C#" Theme="diary"%>
可以自动加载到aspx页面,可是在设计时并不能看到其效果,需要运行后才能看出来。
通过以上两点个人感觉Theme主题并无多大用处,大家觉得呢?
另外再问一个问题,使用了Master母版页的页面如何链接.css文件,如果把所有页面都写到Master母版页里怕每个.css文件会有冲突,如果用Theme来加载又不能在设计时看到效果,另外在程序里加载也是不能在设计时看到效果。

解决方案 »

  1.   

    不错的,skin文件可以和CSS配套使用的
      

  2.   

    是呀, html+css,java那边也是这样用呀。
    我们程序员的精力都有限呀。这样能用了,没什么时间去研究服务器控件了。
      

  3.   

    首先里面的skin文件支持的是服务器控件的外观设置,
    =======
    服务器控件最终转换成 html 元素,浏览器根本不知道 runat=server 的存在可一般开发人员或者美工设计的界面都是html+css的,并没有几个人对服务器控件的那些外观属性很熟悉,
    =======
    服务器控件可直接引用 css (Control.CssClass 属性),对于简单控件,你依然可以使用 #id 或者直接命名html元素如 p td div 的样式,来进行“样式层叠”当然,因为服务器控件实现机制,复合控件,如 TreeView DataGrid 等通常只有使用前者
    而且那些控件那么多,每新出一个新的服务器控件都要去熟悉它的那些外观属性吗。
    =======
    这是一个“举一反三”“一通百通”的过程因为,所有的服务器内置公开支持的对应 CSS 属性,接口都是统一的,实现方式是一致的!
      

  4.   

    谢谢楼上的回答,可惜没回答到点子上,我的观点还是有css就可以了,App_Themes里的.skin文件并无多大用处
      

  5.   

    关于,web 开发UI层开发人员,你必不可少的必须熟悉 HTML CSS js,
    至于熟悉到何种程度,由你角色决定asp/php/.... 你同样需要熟悉美工也需要熟悉  HTML CSS ,否则设计出来的效果,只能当“海报”用,不能当“网页”当两者需要整合的时候, asp/php/....  通常更加难以维护,因为他们纯是【内联】方式的代码,静态 html/css/js 与动态输出部分无法分离开发人员不能等美工将 html 设计好之后再导入,然后编码,相反,asp.net,力求在编码开发阶段,为开发人员提供客户端UI(html/css/js)层次呈现无关的【服务器控件】并包装相关的对应的 html属性和css 属性,提供插入 js 的接口,如 RegisterClientScriptXXXXX 方法,当然,这并没有真的达到早期宣扬的 “代码”【真正】分离的效果,虽然,你是可以直接使用大量的服务器 css 相应属性,比如 GridView/DataGrid/.... 设计器提供了多个预定义的样式,
    这样你是真的【分离】了,但是最终呈现出来的效果,几乎是“惨不忍睹”,
    要么效果不佳,丑陋,
    要么是布局不够精确(记得 VS 03提供那个 gridlayout 迈?纯粹是鸡肋,以为通过拖拽可以“画”出 web 页面 ...),web 上面差一橡树都不行
    要么是大量的冗余代码,比如直接使用 GridView 内置样式模版,会给你生成大量的冗余 css,
    全部是 inline (内联)方式的可喜的是, asp.net 3.5 (VS 2008) 对此进行了改善,大量象 CSS 靠拢,可以完全分离出 css,大量减少 内联方式 的 css, 比如新提供的 ListView
    因此,不尽完美,革命尚未成功,但是前途是光明的 :),需要一个渐进的过程,2.0 提供的 Theme/Shin 相对 1.x 已经是一个很大进步,服务器端属性与Theme/Shin 一个最大的邮电就是:便于编程访问/修改,便于编程动态的改变相关的属性!对于 theme/skin 同时提供了成批设置同类服务器控件的优势
      

  6.   

    我的观点还是有css就可以了,App_Themes里的.skin文件并无多大用处========参考楼上回复最后几句,.skin 最终基于的还是 css,通过 skin 中对目标 服务器控件样式属性定义,当然也可以直接引用外部 css,然后 asp.net 将其转换成 css 呈现给客户端你为 TextBox 定义一个 skin, 可将此 skin 应用于多个 TextBox,
    你说,那么我给 TextBox.CssClass 直接定义就行了啊,没错,对于简单控件是如此,因为他们的 css 元素单一,
    但是,对于复合控件就不一样了, 比如 GridView, 有 header footer item pager 等多个局部样式需要定义,你依然可以单独的设置每个的 css, 
    但是我通过为 GridView 定义一个 skin,将其需要的 css 统一组合在一起,直接一个GridView.SkinID 修改就行了,岂不更好?
      

  7.   

    对于GridView, 有 header footer item pager 布局,你说得对,用skin的确比直接用css来得方便,可是现在大家设计的布局和界面都是用html+css设计的吧,再把这些界面换到header footer item pager 的那些属性里是不是太累了些,还不如直接把设计好的表格或者div拷到模版里,另外用主题最大的一个缺点就是不能在设计时看到效果,这是很糟糕的不是吗,包括在主题里添加的.css文件也是看不到效果的
      

  8.   

    本质都是CSS,微软可能觉得在每个页面<link href=... />这样操作太烦了,就封闭成Theme。
    可能一下子适应不了这个改变
      

  9.   

    再把这些界面换到header footer item pager 的那些属性里是不是太累了些
    =======
    需要一定的工作量,但是有经验的设计师一点都不累
    一项很愉快的工作 :)
    还不如直接把设计好的表格或者div拷到模版里
    =======
    是啊,模版列,你完全可以这么干,比如 Repeater ,完全依赖你自己的设计特使 asp.net 3.5 提供的ListView 更加自由
    另外用主题最大的一个缺点就是不能在设计时看到效果,这是很糟糕的不是吗,包括在主题里添加的.css文件也是看不到效果的=======这是个问题,目前我没有对 VS 2008 关注是否解决此问题,需要 checkout ....事实上,我们基本忽略了此问题,因为从一定意义上,我从不将 VS 当作一个 Web 设计器,他是用来 Coding 的,我几乎从不拖拽,拉伸来完成任何我可以直接快速编码实现的工作并且,几乎所有的 Web 设计器并不全完全兼容浏览器呈现效果,包括 DW,假如你很在意,应该考虑使用 Microsoft Web Expression 来进行 UI 可视化设计,
    与 IE ASP.NET  VS 兼容性很好并且 VS 2008 在 web 设计器上做了很大的改进,比如 DW 和 FP 提供的经典的 代码/视图 分隔
      

  10.   

    学习了楼主可以把那个放到webconfig里面的,不用每个页面都声明一次
      

  11.   

    VS 2008 目前已经是 beta2你可以将 VS 2005(基于 .net 2.0)的项目移植到 VS 08,依然可以基于 .net 2.0 而不需要同步省级到 .net 3.5这样你充分的,提前的,体验 VS 08Enjoy it ;)
      

  12.   

    Theme/Skin 还可以应用 onmouseover 之类的,比如// .skin
    <asp:Button SkinID="MyButtonSkin" runat="server" onmouseover="this.style.background='url(image/button2.gif)'" onmouseout="this.style.background='url(image/button.gif)'" />
    // .aspx
    <asp:Button SkinID="MyButtonSkin" runat="server" />
    假如你有中需求,似乎纯标准 CSS 就办不到了吧?看到了吧,其实很多“技巧”有待我们去发掘,theme 为我们提供了额外的选择,但没有强迫你去“消费”它有选择,总比没有好,是吧?虽然,有不尽人意的地方 ....你喜欢,就用你自己风格 :)