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