DevExpress换肤功能使用方法
DevExpress换肤功能使用方法第一步:让所有窗体都从DevExpress.XtraEditors.XtraForm继承。
第二步:添加两个引用: DevExpress.BonusSkins.v8.1 DevExpress.OfficeSkins.v8.1 第三步:在软件的入口Program类的main函数的第一行代码前加上: DevExpress.UserSkins.BonusSkins.Register(); DevExpress.UserSkins.OfficeSkins.Register(); DevExpress.Skins.SkinManager.EnableFormSkins(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FormMain()); 第四步:每个窗口放个DefaultLookAndFeel控件, 第五步:软件往往有个设置皮肤的地方,这个地方往往是需要枚举出所有皮肤的,把皮肤全部枚举出来放到一个ComboBoxEdit中,代码如下: foreach (DevExpress.Skins.SkinContainer skin in DevExpress.Skins.SkinManager.Default.Skins) cmbAppStyle.Properties.Items.Add(skin.SkinName); 第六步:设置皮肤,怎样设置皮肤呢,只需设置每个窗口的DefaultLookAndFeel即可,代码如下: this.defaultLookAndFeel1.LookAndFeel.SkinName = cmbAppStyle.EditValue.ToString(); 现在,大部分的问题都解决了,最后一个问题,怎样在设置皮肤时,将所有已打开的窗口的皮肤都改成对应的样式呢?(在DevExpress8.1.5中, 这个功能自带,但是,并不完全,有缺陷)最基本的方法当然是观察者模式,但是,我想到在winforms中应当有枚举所有已打开窗口的方法。果然,找到 了:Application.OpenForms,再说明一下,为了能统一管理所有窗口的皮肤,我写了个基类,BaseForm,它继承自 DevExpress.XtraEditors.XtraForm。在BaseForm中放个DefaultLookAndFeel。并创建一个公共的属 性DefaultLookAndFeel。然后,在设置皮肤的地方写上: foreach (Form f in Application.OpenForms) { if (f is TimerApp.Forms.BaseForm) (f as TimerApp.Forms.BaseForm).DefaultLookAndFeel.LookAndFeel.SkinName = value; } 但是,这个方法有问题,出错了,说什么“OpenForms集合已变化,无法枚举!”,郁闷。只好用观察者模式了。被观察者的类如下: using System; using System.Collections.Generic; using System.Text; using TimerApp.Forms; namespace TimerApp.Utils { public class SkinSubject { private static SkinSubject subject = null; private List<BaseForm> forms = new List<BaseForm>(); public static SkinSubject GetInstance() { if (subject == null) subject = new SkinSubject(); return subject; } private SkinSubject() { } /// <summary> /// 注册观察者 /// </summary> /// <param name="f"></param> public void Register(BaseForm f) { forms.Add(f); } /// <summary> /// 注销观察者 /// </summary> /// <param name="f"></param> public void UnRegister(BaseForm f) { forms.Remove(f); } /// <summary> /// 修改每个观察者的皮肤 /// </summary> /// <param name="skinName"></param> public void Notify(string skinName) { foreach (BaseForm f in forms) f.DefaultLookAndFeel.LookAndFeel.SkinName = skinName; } } } 这并不是一个标准的观察者模式,它又混合了singon模式,因为被观察者只有一个,且,不需要回调观察者中方法。 注:DevExpress中的默认皮肤名的取得:DevExpress.Skins.SkinManager.DefaultSkinName 本文来源:
参考文档:
C# Barcode条码控件使用方法 C#实现DevExpress控件换肤功能 DevExpress DateEdit组件是空日期,传入SQL参数报错解决方法 开发框架修正重要bug,使用SqlDataAdapter.Update方法后没有关闭SQL连接 使用SendKeys.Send发送Tab键代替SelectNextControl()方法 关于frmBaseChild.SetParameter方法说明与使用,打开窗体传入参数例子 使用DbProviderFactories.GetFactory方法需要配置数据库提供者 C/S结构快速开发框架使用的DevExpress常用组件 WebApi实例教程和使用方法:部署和发布WebApi到IIS服务器 用户数据操作报告(frmOperateReport)窗体使用方法 C# LINQ使用Distinct方法检查对象某个属性的值是否重复 IDatabase.ExecuteReader返回对象列表Func泛型函数的使用方法 WCF:方法SendMessage在此代理中不受支持,如果未使用OperationContractAttribute标记 DevExpress TreeList树组件自定义TreeListNode的Tooltip的方法(自动消息提示) Winform软件快速开发框架(使用DevExpress正版授权皮肤组件)
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |