运行期改变Winform的外观,让Winform可以像Asp.Net一样,通过类似CSS一样的配置文件实现外观的自定义。
当然,配置文件是XML格式的,而不是CSS格式的。
怎样才能实现呢?
总共分三步,下面我们一步一步来。
第一步:创建一个用来存储外观属性的对象,这里我把它定义为Style.cs。
让Winform披上CSS的外衣protected Color m_TextBackColor = Color.Yellow;
让Winform披上CSS的外衣
让Winform披上CSS的外衣
protected Color m_TextForeColor = Color.Blue;
让Winform披上CSS的外衣
让Winform披上CSS的外衣
protected Font m_TextFont = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
让Winform披上CSS的外衣
让Winform披上CSS的外衣
public string XMLTextBackColor
}

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

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

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

让Winform披上CSS的外衣XmlSerializer serializer = null;
让Winform披上CSS的外衣FileStream ioStream 
= null;
让Winform披上CSS的外衣Style style 
= new Style();
让Winform披上CSS的外衣serializer 
= new XmlSerializer(typeof(Style));
让Winform披上CSS的外衣ioStream 
= new FileStream(filePath, FileMode.Create);
让Winform披上CSS的外衣serializer.Serialize(ioStream, style);

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

相关文章:

  • 2022-01-20
  • 2021-10-31
  • 2022-01-22
  • 2021-08-24
  • 2021-10-18
  • 2022-02-09
  • 2021-07-23
  • 2021-12-31
猜你喜欢
  • 2021-09-29
  • 2022-02-10
  • 2021-10-14
  • 2022-01-14
  • 2021-10-03
  • 2022-01-02
  • 2021-04-05
相关资源
相似解决方案