ASP.NET中的主皮肤文件

eyc*_*ych 4 asp.net themes skin

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

Nar*_*man 5

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

选项#1:使用VirtualPathProvider

(这样做的缺点是,如果没有基于反射的解决方法,则无法在预编译的网站上使用它.)

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

App_Themes
- Global
  \Global.skin (primary)
- ThemeA 
  \Global.skin (empty placeholder)
- ThemeB
  \Global.skin (empty placeholder)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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