ASP.NET中的主皮肤文件

时间:2009-10-16 18:58:35

标签: asp.net themes skin

我的项目有多个不同颜色的主题 我需要使用特定的字体/大小等来修饰某些文本框。[无色差]
目前,我将<asp:TextBox SkinID="skinned" runat="server".../>添加到每个主题下的所有.skin文件中。 有没有办法将这个文本框皮肤放在一个地方,比如主皮肤?

2 个答案:

答案 0 :(得分:5)

ASP.NET主题实现中缺少继承或级联是一个不幸的限制,没有得到很多关注。在您希望所有主题可用的全局外观(不更改控件定义本身)的情况下,您有两种选择:

选项#1:使用VirtualPathProvider

(缺点是你不能在没有基于反射的workaround的预编译网站上使用它。)

您可以在特殊的全局主题下定义 Global.skin 文件,其中保留共享皮肤;您还将在所有其他主题下创建占位符Global.skin文件:

App_Themes
- Global
  \Global.skin (primary)
- ThemeA 
  \Global.skin (empty placeholder)
- ThemeB
  \Global.skin (empty placeholder)

VirtualPathProvider 中,您可以将 App_Themes \ * \ Global.skin 的所有请求重新路由到 App_Themes \ Global \ Global.skin

选项#2:使用构建后任务

这是对上述解决方案的修正,避免了预编译网站的限制;而不是在运行时重新路由,您可以通过ms-build任务在构建后应用它,该任务只是将 Global \ Global.skin 传播到所有其他主题文件夹。

我已成功使用这两个选项。

答案 1 :(得分:0)

您需要在每个主题下列出它,但您只需要为每个主题列出一个控件定义。如果希望外观是控件的默认行为,请指定不带SkinID属性的定义。