提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2012-10-09 13:47:45.000|阅读 434 次
概述:在DevExpress.XtraEditors.XtraForm中,窗体的样式和皮肤有UseDefaultLookAndFeel属性。设置为false,就可以直接再属性里面修改样式和皮肤了。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
在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.最后是定义一个窗体,设置和保存样式及皮肤。
具体代码略。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
优秀的界面控件开发包,帮助企业构建卓越应用!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢