C#实现DevExpress控件换肤功能
C#实现DevExpress控件换肤功能
在写CS框架第2版时遇到换肤问题,最初设计思路是建立一个窗体frmBase,继承XtraForm,在窗体拖放一个DefaultLookAndFeel控件,项目内所有窗体都继承frmBase类。在frmBase_Load事件内设
this.DefaultLookAndFeel.LookAndFeel.SkinName = skinName就可以设置皮肤。然而,这种设计带来一个问题: 当打开一个窗体时加载两次皮肤引起NavBarControl控件闪烁!查看Designer.cs:
private void InitializeComponent()
{
....
this.defaultLookAndFeel1 = new DevExpress.LookAndFeel.DefaultLookAndFeel(this.components);
.....
}
引起闪烁的原因:
窗体构造器调用InitializeComponent()方法,该方法会实例化this.defaultLookAndFeel1 控件。
因this.defaultLookAndFeel1预设SkinName是Caramel, 此时加载Caramel皮肤。接下来执行
frmLoad事件,又加载从用户配置文件读取的SkinName,如皮肤名不同会引起闪烁!
解决方法是:去掉窗体上的defaultLookAndFeel1控件,自己写代码构造defaultLookAndFeel1对象,
通过改进后frmBase窗体代码如下:
public partial class frmBase : XtraForm
{
//定义皮肤控件
public DefaultLookAndFeel DefaultLookAndFeel;
public frmBase()
{
InitializeComponent();
DefaultLookAndFeel = new DefaultLookAndFeel();
}
/// <summary>
/// 设置皮肤
/// </summary>
/// <param name="skinName"></param>
public void LoadSkin(string skinName)
{
this.DefaultLookAndFeel.LookAndFeel.SkinName = skinName;
}
}
{
//定义皮肤控件
public DefaultLookAndFeel DefaultLookAndFeel;
public frmBase()
{
InitializeComponent();
DefaultLookAndFeel = new DefaultLookAndFeel();
}
/// <summary>
/// 设置皮肤
/// </summary>
/// <param name="skinName"></param>
public void LoadSkin(string skinName)
{
this.DefaultLookAndFeel.LookAndFeel.SkinName = skinName;
}
}
通过调用窗体的LoadSkin方法设置皮肤。

参考文档:
详解DevExpress.LookUpEdit控件实现自动搜索定位功能|C/S开发框架
DevExpress RibbonControl组件实现右键弹出菜单(PopupMenu)
DevExpress GridView表格记录位置调整,实现DataRow记录排序
DevExpress GridControl实现右键弹出菜单复制单元格
详解DevExpress.LookUpEdit控件实现自动搜索定位功能
使用DeepSeek生成DevExpress表格、窗体、C#模型代码并集成到开发框架|C/S开发框架
DevExpress设置主题切换界面皮肤样式 | SetSkinStyle方法 | Winform 蝇量框架|C/S开发框架
C# DevExpress双击表格删除当前记录|C/S开发框架
企业级数据权限框架 - 集团组织架构数据权限开发框架(C/S+Winform+DevExpress)
DevExpress TreeList树组件自定义TreeListNode的Tooltip的方法(自动消息提示)
Winform企业级WCF快速开发框架平台(C/S架构+WCF+DevExpress+SQL多数据库)
C# Winform 使用SUM CASE WHEN实现动态列交叉数据报表
修改单元格关联更新其它列的值,Dev GridView组件OnCellValueChanged事件实现
DevExpress Winform 采用GridControl表格组件开发的会计凭证控件(C#源码)
基于DevExpress C# Winform 财务会计凭证表格金额录入组件(支持元角分)
C# DevExpress会计凭证表格金额录入组件(支持元角分)
详解DevExpress.LookUpEdit控件实现自动搜索定位功能|C/S开发框架
DevExpress RibbonControl组件实现右键弹出菜单(PopupMenu)
DevExpress GridView表格记录位置调整,实现DataRow记录排序
DevExpress GridControl实现右键弹出菜单复制单元格
详解DevExpress.LookUpEdit控件实现自动搜索定位功能
使用DeepSeek生成DevExpress表格、窗体、C#模型代码并集成到开发框架|C/S开发框架
DevExpress设置主题切换界面皮肤样式 | SetSkinStyle方法 | Winform 蝇量框架|C/S开发框架
C# DevExpress双击表格删除当前记录|C/S开发框架
企业级数据权限框架 - 集团组织架构数据权限开发框架(C/S+Winform+DevExpress)
DevExpress TreeList树组件自定义TreeListNode的Tooltip的方法(自动消息提示)
Winform企业级WCF快速开发框架平台(C/S架构+WCF+DevExpress+SQL多数据库)
C# Winform 使用SUM CASE WHEN实现动态列交叉数据报表
修改单元格关联更新其它列的值,Dev GridView组件OnCellValueChanged事件实现
DevExpress Winform 采用GridControl表格组件开发的会计凭证控件(C#源码)
基于DevExpress C# Winform 财务会计凭证表格金额录入组件(支持元角分)
C# 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内容管理系统 |
什么是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内容管理系统 |
在线客服
