代码改变世界

Subtext--为skin准备相关文件加载

2007-04-06 21:21  Clingingboy  阅读(706)  评论(0编辑  收藏  举报
      定制skin模板中的用户控件时,为了更好的管理样式,我们一般推荐定义样式表,然后在相应的地方添加样式,我们最好也不摇在用户控件中直接引入样式表,这样很容易出错。所以Subtext提供了一个配置文件Skins.config,其为一个定制的xml文件,专为skin设置,你可以为每套模板有选择性的添加样式文件,如下

<?xml version="1.0"?>
<SkinTemplates xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
<!--
        Note that multiple skins may share the same template folder.
        Each template folder by 
default should have a style.css file. 
        This file does not need to be configured 
in this section.
        
        For skins that share a template folder, the skins should be 
        distinguished by their stylesheet.  Note that when specifying 
        a StyleSheet
="" attribute, this style is rendered AFTER "style.css" 
        allowing the skin to 
override template specific styles.
    
-->
    
<Skins>
        
<SkinTemplate Name="AnotherEon001" TemplateFolder="AnotherEon001">
            
<Styles>
                
<Style href="~/skins/_System/csharp.css" />
                
<Style href="~/skins/_System/commonstyle.css" />
                
<Style href="~/skins/_System/commonlayout.css" />
                
<Style href="print.css" media="print" />
            
</Styles>
        
</SkinTemplate>

        
<SkinTemplate Name="BlueBook" TemplateFolder="RedBook" StyleSheet="Blue.css">
            
<Scripts>
                
<Script Src="~/Admin/Resources/Scripts/niceForms.js" />
            
</Scripts>
            
<Styles>
                
<Style href="~/skins/_System/csharp.css" />
                
<Style href="~/skins/_System/commonstyle.css" />
                
<Style href="~/skins/_System/commonlayout.css" />
                
<Style href="niceforms-default.css" />
                
<Style href="print.css" media="print" />
            
</Styles>
        
</SkinTemplate>
</Skins>
</SkinTemplates>

这里包含几个元素呢?

一.SkinTemplates为根路径
二.Skins表示模板集合
三.SkinTemplate表示一个模板的内容包含Styles和Scripts
四.Styles表示要加载的样式文件集合
五.Scripts表示要加载的脚本文件集合

页面会根据模板到这个配置文件里来读取并加载相关文件。

xml定义好了,你该如何做呢.利用xml序列化的功能.你首先得为上面的几个对象定义实体类



注意元数据属性,是为必须的,根据元数据熟悉属性再看看那个xml文件,意思是一一对应的。

接着便是SkinTemplates的真正反序列化的过程了,接着呢你就可以来个迭代,来加载相关skin文件了。
当然别忘了定义一个集合skins
        [XmlArray("Skins")]
        
public List<SkinTemplate> Templates
        
{
            
get {return this._skinTemplates;}
            
set {this._skinTemplates = value;}
        }