让Winform披上CSS的外衣

运行期改变Winform的外观,让Winform可以像Asp.Net一样,通过类似CSS一样的配置文件实现外观的自定义。
当然,配置文件是XML格式的,而不是CSS格式的。
怎样才能实现呢?
总共分三步,下面我们一步一步来。
第一步:创建一个用来存储外观属性的对象,这里我把它定义为Style.cs。
protected  Color m_TextBackColor  =  Color.Yellow;

protected  Color m_TextForeColor  =  Color.Blue;

protected  Font m_TextFont  =   new  System.Drawing.Font( " 宋体 " , 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (( byte )( 128 )));

public   string  XMLTextBackColor
{
    
get return cc.ConvertToString(m_TextBackColor); }
    
set { m_TextBackColor = (Color)cc.ConvertFromString(value); }
}


public   string  XMLTextForeColor
{
    
get return cc.ConvertToString(m_TextForeColor); }
    
set { m_TextForeColor = (Color)cc.ConvertFromString(value); }
}


public   string  XMLTextFont
{
    
get return fc.ConvertToString(m_TextFont); }
    
set { m_TextFont = (Font)fc.ConvertFromString(value); }
}


[XmlIgnore]
public  Color TextBackColor
{
    
get return m_TextBackColor; }
    
set { m_TextBackColor = value; }
}


[XmlIgnore]
public  Color TextForeColor
{
    
get return m_TextForeColor; }
    
set { m_TextForeColor = value; }
}



[XmlIgnore]
public  Font TextFont
{
    
get return m_TextFont; }
    
set { m_TextFont = value; }
}

这个类里面都是类似这样的一些颜色字体之类的外观,注意,这里面有两类属性,一类(以XML开头)是跟XML配置文件关联的,另一类是为了防止配置文件里面没有定义,就采用默认值。

第二步:在窗体上添加一个 BindingSource控件,并且按照下图设置属性。
设置好了DataSource之后,我们最后需要做的就是把这两个东西和我们所说的配置文件真正的联系起来。

进入第三步:生成XML文件,并且利用这个文件。
.Net的 System.Xml.Serialization空间里面的一些类可以帮助我们。
我们需要读写配置文件、序列化和反序列化Style类,那么我们就要用到 XmlTextReaderXmlSerializer两个类。
XmlTextReader xr  =   null ;
xr 
=   new  XmlTextReader(filePath);
xr.WhitespaceHandling 
=  WhitespaceHandling.All;
XmlSerializer serializer 
=   new  XmlSerializer( typeof (Style));
m_Style 
=  (Style)serializer.Deserialize(xr);
return  m_Style;

XmlSerializer serializer  =   null ;
FileStream ioStream 
=   null ;
Style style 
=   new  Style();
serializer 
=   new  XmlSerializer( typeof (Style));
ioStream 
=   new  FileStream(filePath, FileMode.Create);
serializer.Serialize(ioStream, style);

以上分别是读取配置文件然后把配置文件反序列化和序列化到配置文件的操作。
这样子,我们就可以利用配置文件了。
只需要在窗体的构造方法中把BindingSourceDataSource设置为利用XML文件反序列化的类的实例就可以了。
完整的代码:http://www.cnblogs.com/Files/game-over/StyleForm.zip
最后贴一张效果图:
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值