主题和皮肤的内容
前面的部分已经讲过皮肤文件包含了控件属性值的定义它可以应用在程序的同种类型的控件上这一部分讨论添加到皮肤文件或主题的哪些内容是有效的
Themable(可应用主题的)属性
皮肤文件中的控件定义只能包含属性的值它们都被标记为Themeable(可应用主题)每个控件都可以通过在属性上使用ThemeableAttribute来定义一组属性把不可应用主题的属性添加到皮肤文件中会导致错误出现某个控件本身可能被主题排除了例如数据源控件就不可应用主题在默认情况下任何控件的ID属性是不能应用主题的除非控件有特定的要求否则在默认情况下它的所有属性都是可以应用主题的你可以参照NET框架组件参考文档来确认控件的属性是否可以应用主题
在主题中使用CSS
通过把级联样式表(CSS)放置在命名主题的子目录中你可以给该主题添加CSS如果页面包含了<head runat=server/>控件定义那么该CSS样式表将应用于所有使用了该主题的页面你可以根据需要重命名CSS文件只要它的扩展名是css一个主题可以包含多个CSS文件当页面中包含了CSS文件的引用(在<head/>元素中使用<link rel=stylesheet href=/>标记)的时候主题中的CSS文件都在页面的样式表后面应用
在主题中使用图像
主题中也可以包含图像它们是皮肤文件中的控件定义引用的皮肤文件中的图像引用必须使用主题目录下的图像文件夹的相对路径这样皮肤文件和图像才能轻易地随应用程序迁移在运行时图像的路径会被重新定位因此对目标页面中的控件来说这个引用是相对的下面的例子演示了一个包含图像子目录的主题
<%@ Page Language=VB Theme=MyTheme %>
<asp:Image ID=Image SkinID=Warning runat=server />
<asp:Label ID=Label runat=server Text=Hello /><br />
<asp:Image ID=Image SkinID=Warning runat=server />
<asp:Label ID=Label runat=server Text=Hello /><br />
<asp:Image ID=Image SkinID=Warning runat=server />
<asp:Label ID=Label runat=server Text=Hello /><br />
定制控件集合主题
你在皮肤文件中设置的大多数属性都是一些简单的值属性例如FontNameWidth和 BackColor但是你也可以设置皮肤集合属性皮肤集合属性并非应用在目标控件的集合项的属性上而是在使用主题或使用StyleSheetTheme合并集合的时候完全地替代集合
这对于某些包含样式集合的集合属性是有用处的例如TreeView控件的LevelStyles(层次样式)属性或Menu控件的LevelMenuItemStyles(菜单项样式)LevelSubMenuItemStyles(子菜单项样式)或LevelSelectedStyles(选中的样式)属性
TreeViewskin的内容
<asp:TreeView runat=server
FontNames=Verdana
ForeColor=Black
HoverNodeStyleFontUnderline=true
ShowExpandCollapse=false
NodeIndent=
>
<LevelStyles>
<asp:TreeNodeStyle ChildNodesPadding= FontBold FontSize=pt ForeColor=DarkGreen/>
<asp:TreeNodeStyle ChildNodesPadding= FontBold FontSize=pt />
<asp:TreeNodeStyle ChildNodesPadding= FontUnderLine FontSize=pt />
<asp:TreeNodeStyle FontSize=pt />
</LevelStyles>
</asp:TreeView>
[] [] [] [] [] [] [] [] []