上篇随笔中写了如何使用DevExpress的皮肤控件,选择一个皮肤之后,如果不保存在本地,下次打开程序还需要重新选择,选择皮肤也就没有意义了,于是想到使用xml文件方式保存皮肤,代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DevExpress.Skins; using DevExpress.LookAndFeel; using DevExpress.UserSkins; using DevExpress.XtraBars.Helpers; using System.Xml; namespace SkinsDemo { public partial class Form1 : DevExpress.XtraEditors.XtraForm { string defaultSkinName; public Form1() { InitializeComponent(); InitSkinGallery(); } #region 皮肤 //初始化皮肤 void InitSkinGallery() { gallerySkins.Manager = barManager1; SkinHelper.InitSkinGalleryDropDown(gallerySkins, true); CheckFile();//检查文件 GetXmlSkin();//获取xml主题 UserLookAndFeel.Default.SetSkinStyle(defaultSkinName);//设置主题样式 } //检查是否有皮肤名称的xml配置文件 public void CheckFile() { try { if (System.IO.File.Exists("SkinInfo.xml") == false) { CreateXml(); } } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // 创建XML文件 public void CreateXml() { XmlDocument doc = new XmlDocument(); //建立xml定义声明 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null); doc.AppendChild(dec); XmlElement root = doc.CreateElement("SetSkin"); //创建根节点 XmlElement rootone = doc.CreateElement("Skinstring");//皮肤 doc.AppendChild(root);//将one,two,插入到root节点下 root.AppendChild(rootone); doc.Save("SkinInfo.xml");//保存皮肤名称文件为xml格式 } //读取Xml节点内容 public void GetXmlSkin() { try { XmlDocument mydoc = new XmlDocument(); mydoc.Load("SkinInfo.xml");//从xml文件中提取皮肤名称 XmlNode ressNode = mydoc.SelectSingleNode("SetSkin");//头和尾 defaultSkinName = ressNode.SelectSingleNode("Skinstring").InnerText;//把提取出来的皮肤名称存到defaultSkinName中 } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } //保存皮肤 private void galleryDropDown1_GalleryItemClick(object sender, DevExpress.XtraBars.Ribbon.GalleryItemClickEventArgs e) { if (gallerySkins.Gallery == null) { return; } XmlDocument doc = new XmlDocument(); doc.Load("SkinInfo.xml"); XmlNodeList nodelist = doc.SelectSingleNode("SetSkin").ChildNodes; foreach (XmlNode node in nodelist) { XmlElement xe = (XmlElement)node;//将子节点类型转换为XmlElement类型 if (xe.Name == "Skinstring") { xe.InnerText = gallerySkins.Gallery.GetCheckedItems()[0].Caption;//主题的描述,保存所选的主题名称,参见GetCheckedItems()[0]函数的解释,主要用这个函数提取皮肤名称 } } doc.Save("SkinInfo.xml"); } #endregion } }
时间: 2024-10-05 02:05:18