在DevExpress.XtraEditors.XtraForm中,窗体的样式和皮肤有UseDefaultLookAndFeel属性。设置为false,就可以直接再属性里面修改样式和皮肤了。如果设置为true,可以再里面放控件defaultLookAndFeel,设置 defaultLookAndFeel的样式和皮肤,XtraForm窗体的样式和皮肤就可以随着改变。

我试着定义一个XFrmBase窗体,再窗体上房一个控件:defaultLookAndFeel1,定义为Protected。然后其它窗体都从这个窗体上继承。发现再代码的任何一个地方,修改defaultLookAndFeel1的属性,所有窗体的样式和皮肤跟着改变。然后再把皮肤和样式保存在XML文件中,就实现了所谓的换肤功能。

具体步骤如下:
1. 定义一个XFrmBase窗体,在这个窗体上放defaultLookAndFeel1控件,修改为Protected。在XFrmBase.Designer.cs中,把
//this.defaultLookAndFeel1.LookAndFeel.SkinName = ...;
//this.defaultLookAndFeel1.LookAndFeel.Style = ...;
这两行注释掉,然后其它所有的窗体都从这个窗体继承。

2. 定义两个XML文件:
StyleXML.xml
<?xml version="1.0" encoding="utf-8"?>
<xml>
  <Style>
    <StyleValue value="">Flat</StyleValue>
    <StyleValue value="">UltraFlat</StyleValue>
    <StyleValue value="IsSelected">Style3D</StyleValue>
    <StyleValue value="">Office2003</StyleValue>
    <StyleValue value="">WinXp</StyleValue>
    <StyleValue value="">Skin</StyleValue>
  </Style>
</xml>
SkinXML.xml
<?xml version="1.0" encoding="utf-8"?>
<xml>
  <Skin>
    <SkinValue value="IsSelected">Caramel</SkinValue>
    <SkinValue value="">Money Twins</SkinValue>
    <SkinValue value="">Lilian</SkinValue>
    <SkinValue value="">The Asphalt World</SkinValue>
    <SkinValue value="">iMaginary</SkinValue>
    <SkinValue value="">Black</SkinValue>
    <SkinValue value="">Blue</SkinValue>
  </Skin>
</xml>

3. 两个操作XML文件的类:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Data;
using System.IO;

namespace FlowerWin.Classes
{
    public class XmlControl
    {
        protected string strXmlFile;
        protected XmlDocument objXmlDoc = new XmlDocument();

public XmlControl(string xmlFile)
        {
            try
            {
                objXmlDoc.Load(xmlFile);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            strXmlFile = xmlFile;
        }

public DataView GetData(string xmlPathNode)
        {
            DataSet ds = new DataSet();
            StringReader read = new StringReader(objXmlDoc.SelectSingleNode(xmlPathNode).OuterXml);
            //string test = objXmlDoc.SelectSingleNode(xmlPathNode).OuterXml;
            ds.ReadXml(read);
            return ds.Tables[0].DefaultView;
        }

public DataTable GetData(string xmlPathNode, string attrib)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("NodeName", typeof(string));
            dt.Columns.Add(attrib, typeof(string));

XmlNodeList xnList = objXmlDoc.SelectNodes(xmlPathNode);
            foreach (XmlNode xn in xnList)
            {
                if (xn.Attributes[attrib] != null)
                {
                    DataRow dr = dt.NewRow();
                    dr[0] = xn.InnerText;
                    dr[1] = xn.Attributes[attrib].Value;
                    dt.Rows.Add(dr);
                }
            }

return dt;
        }

public void Replace(string xmlPathNode, string content)
        {
            objXmlDoc.SelectSingleNode(xmlPathNode).InnerText = content;
        }

public void Delete(string node)
        {
            string mainNode = node.Substring(0, node.LastIndexOf("/"));
            objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(node));
        }

public void InsertNode(string mainNode, string childNode, string element, string content)
        {
            XmlNode objRootNode = objXmlDoc.SelectSingleNode(mainNode);
            XmlElement objChildNode = objXmlDoc.CreateElement(childNode);
            objRootNode.AppendChild(objChildNode);
            XmlElement objElement = objXmlDoc.CreateElement(element);
            objElement.InnerText = content;
            objChildNode.AppendChild(objElement);
        }

public void InsertElement(string mainNode, string element, string attrib, string attribContent, string content)
        {
            XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
            XmlElement objElement = objXmlDoc.CreateElement(element);
            objElement.SetAttribute(attrib, attribContent);
            objElement.InnerText = content;
            objNode.AppendChild(objElement);
        }

public void InsertElement(string mainNode, string element, string content)
        {
            XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
            XmlElement objElement = objXmlDoc.CreateElement(element);
            objElement.InnerText = content;
            objNode.AppendChild(objElement);
        }

public string[] GetNodeList(string xmlPathNode)
        {
            XmlNodeList xnList = objXmlDoc.SelectNodes(xmlPathNode);
            string[] strArr = new string[xnList.Count];
            for (int i = 0; i < xnList.Count; i++)
            {
                strArr[i] = xnList[i].InnerText;
            }
            return strArr;
        }

public string GetNodeStr(string xmlPathNode, string attrib, string attribContent)
        {
            string xnStr = "";
            XmlNodeList xnList = objXmlDoc.SelectNodes(xmlPathNode);
            foreach (XmlNode xn in xnList)
            {
                if (xn.Attributes[attrib] != null)
                {
                    if (xn.Attributes[attrib].Value == attribContent)
                    {
                        xnStr = xn.InnerText;
                        break;
                    }
                }
            }
            return xnStr;
        }

public void SaveNode(string xmlPathNode, string nodeName)
        {
            XmlNodeList xnList = objXmlDoc.SelectNodes(xmlPathNode);
            foreach (XmlNode xn in xnList)
            {
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute("value") == "IsSelected")
                {
                    xe.SetAttribute("value", "");
                }
                if (xe.InnerText == nodeName)
                {
                    xe.SetAttribute("value", "IsSelected");
                }
            }

Save();
        }

public void Save()
        {
            try
            {
                objXmlDoc.Save(strXmlFile);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            objXmlDoc = null;
        }

}
}
///
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using DevExpress.LookAndFeel;

namespace FlowerWin.Classes
{
    public class StyleSkin
    {
        private static string xmlStyle = Common.GetXmlDirectory() + "StyleXml.xml";
        private static string xmlSkin = Common.GetXmlDirectory() + "SkinXml.xml";

public static string GetSelectedStyle()
        {
            XmlControl xmlControl = new XmlControl(xmlStyle);
            string styleName = xmlControl.GetNodeStr("xml/Style/StyleValue", "value", "IsSelected");
            return styleName;
        }

public static void GetLookFeelStyle(DevExpress.LookAndFeel.DefaultLookAndFeel dlf, string styleName)
        {
            string skinName = GetSelectedSkin();
            switch (styleName)
            {
                case "Flat":
                    dlf.LookAndFeel.SetFlatStyle();
                    break;
                case "UltraFlat":
                    dlf.LookAndFeel.SetUltraFlatStyle();
                    break;
                case "Style3D":
                    dlf.LookAndFeel.SetStyle3D();
                    break;
                case "Office2003":
                    dlf.LookAndFeel.SetOffice2003Style();
                    break;
                case "WinXp":
                    dlf.LookAndFeel.SetWindowsXPStyle();
                    break;
                case "Skin":
                    dlf.LookAndFeel.SetSkinStyle(skinName);
                    break;
                default:
                    dlf.LookAndFeel.SetDefaultStyle();
                    break;
            }
        }

public static DevExpress.LookAndFeel.LookAndFeelStyle GetLookFeelStyle(string styleName)
        {
            DevExpress.LookAndFeel.LookAndFeelStyle lfStyle;
            switch (styleName)
            {
                case "Flat":
                    lfStyle = LookAndFeelStyle.Flat;
                    break;
                case "UltraFlat":
                    lfStyle = LookAndFeelStyle.UltraFlat;
                    break;
                case "Style3D":
                    lfStyle = LookAndFeelStyle.Style3D;
                    break;
                case "Office2003":
                    lfStyle = LookAndFeelStyle.Office2003;
                    break;
                case "Skin":
                    lfStyle = LookAndFeelStyle.Skin;
                    break;
                default:
                    lfStyle = LookAndFeelStyle.Office2003;
                    break;
            }
            return lfStyle;
        }

public static string GetSelectedSkin()
        {
            XmlControl xmlControl = new XmlControl(xmlSkin);
            string skinName = xmlControl.GetNodeStr("xml/Skin/SkinValue", "value", "IsSelected");
            return skinName;
        }

public static DataTable GetStytleList()
        {
            XmlControl xmlControl = new XmlControl(xmlStyle);
            DataTable dt = xmlControl.GetData("xml/Style/StyleValue", "value");
            return dt;
        }

public static DataTable GetSkinList()
        {
            XmlControl xmlControl = new XmlControl(xmlSkin);
            DataTable dt = xmlControl.GetData("xml/Skin/SkinValue", "value");
            return dt;
        }

public static void SaveSelectedStlye(string styleName)
        {
            XmlControl xmlControl = new XmlControl(xmlStyle);
            xmlControl.SaveNode("xml/Style/StyleValue", styleName);
        }

public static void SaveSelectedSkin(string skinName)
        {
            XmlControl xmlControl = new XmlControl(xmlSkin);
            xmlControl.SaveNode("xml/Skin/SkinValue", skinName);
        }
    }
}
///
4. 在最先启动的窗体中设置defaultLookAndFeel1
string styleName = StyleSkin.GetSelectedStyle();
 //defaultLookAndFeel1.LookAndFeel.Style = YarnNew.Classes.StyleSkin.GetLookFeelStyle(styleName);
defaultLookAndFeel1.LookAndFeel.SkinName = StyleSkin.GetSelectedSkin();

5.最后是定义一个窗体,设置和保存样式及皮肤。
具体代码略。

http://blog.csdn.net/patrickpan/archive/2007/08/08/1731352.aspx

转载于:https://www.cnblogs.com/godwar/archive/2008/01/18/1044506.html

WinForm中使用DXperience控件中XtraForm,如何实现换肤相关推荐

  1. 关于从页面中获取用户控件中的其它控件(如DropDownList)事件的方法

    在项目中经常把一些经常使用的代码做成用户控件以提高代码的可重用性, 一个经常遇到的就是在页面中调用用户控件中的服务器控件的事件,下面给出简单的代码示列. 我们在一个用户控件(MaterialRepor ...

  2. ASP.Net中的TreeView控件中对节点的上移和下移操作

    Web中的TreeView中的没有PreNode和NextNode属性. 但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点. TreeView中要么只有一个根节点:要么 ...

  3. asp.net 开发过程中关于image控件中图片点击后地址乱码的问题

    前台页面是这样的: <%-- 图片展示20140705add --%>     <div id="imgShowDiv" style="left:550 ...

  4. VB.net实现从ListView控件中异地获取文本内容源代码

    对于一些VB6工程代码来说,需要完成从VB到VB.net的转换,在转换过程中需要注意很多内容,利用VB.net的直接转换功能很少能完全成功,需要我们付出很大的努力. 下面的VB.net代码实现从其他应 ...

  5. Winform实现在DataGridView控件的单元格中添加多个控件

    Winform实现在DataGridView控件的单元格中添加多个控件 背景 实现思路 关键代码 完整代码下载 背景 DataGridView控件的列是支持TextBoxColumn.ComboBox ...

  6. 在WinForm应用程序中嵌入WPF控件(转)

      我们知道,在WPF界面上添加WinForm的控件需要使用WindowsFormHost类.而在WinForm界面上添加WPF控件该如何做呢?有没有类似的类呢?明显是有的,ElementHost就是 ...

  7. WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

    WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色  在B/S开发中,对TreeView控件要改变当前选中节点的颜色比较方便,其有相应的SelectedNodeChanged事件 ...

  8. [转]在Winform(C#)中使用Flash控件

    关于添加Flash控件这里就不介绍了,网上能查到一大堆 VS2005在添加Shockwave时很多人都碰到一个这个问题,就是会说ActiveX注册失败 VS2003没有这样的问题,也不知是什么原因 没 ...

  9. c#在WinForm中重写ProgressBar控件(带%的显示)

    c#在WinForm中重写ProgressBar控件(带%的显示) 2009-05-14 13:13 #region 定义textProgressBar控件的类 namespace csPublish ...

  10. WinForm中使用Excel控件

     最近项目中要在WinForm中使用Excel控件,经过几天的研究,现在总结一下成果. 在WinForm中使用Excel控件主要有三种方法:WebBrowser.DSOFramer.OWC.下面分别 ...

最新文章

  1. java swing控件大全_java swing 组件大全(新手快进)
  2. 说几个著名的死循环:
  3. php不能加载oci8,无法加载动态库'oci8.so'(PHP 7.2)
  4. 用ABAP 生成二维码 QR Code
  5. 30屏幕参数_顶级屏幕加持,一加8系列核心配置、屏幕参数官方公布
  6. 常见排序算法(比较排序)及比较
  7. oel6mysql_OEL6.5_X86平台部署Oracle 11gR2 RAC并配置ACFS
  8. rtl8811au黑苹果10.15_荣耀MagicBook I5黑苹果折腾记(超详细教程与排坑)
  9. SharpZipLib解压缩时中文名乱码[解决]
  10. 苹果mac图像编辑和设计工具:Photoshop 2021
  11. 更新数据,删除缓存,更新数据库谁先执行
  12. 【SpringBoot】整合MyBatis
  13. Maya2018安装报错(错误代码1612)
  14. idea 如何clean工程_IDEA中的clean,清除项目缓存图文教程
  15. [Linux]CentOS修改YUM镜像地址提高下载速度
  16. Not authorized , ReasonPhrase:Unauthorized
  17. html怎样通过链接启动迅雷,火狐浏览器使用迅雷专用链接教程
  18. java 初始化数组_java如何实现数组初始化
  19. 接受投资人投入材料一批_接受投资者投入材料的会计分录
  20. PS 2019 Mac版 自学入门系列(十一)—— 创建光照效果

热门文章

  1. H5 下载文件到本地
  2. 量化指标公式源码_五行量化副图指标公式源码
  3. 古代汉语(王力版)笔记
  4. 电商平台销售数据查询工具(电商运营必备工具)
  5. 软件工程期末复习题库
  6. linux_shell/windows_powershell_变量/环境变量Path的分行/换行查看/关键字搜索环境变量是否已经存在相关的变量的一些函数(cmdlet)表达式
  7. 下载pyboard的flash中的驱动程序_HASP加密狗驱动程序没有安装成功如何解决
  8. Pycharm快速入门(5) — Python解释器和环境配置
  9. 2019年PAT甲级冬季考试真题及参考答案
  10. 杰控连接mysql_工控自动化应用方案:杰控FameView组态软件在数据库连接和查询方面的应用...