C#实现DevExpress控件换肤功能[vjsdn]改进篇

在写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;
}

}

 

通过调用窗体的LoadSkin方法设置皮肤。

本程序类关系图

 

皮肤名:Caramel

 

皮肤名:Black

 

皮肤名:Blue

 

参考:DevExpress换肤功能使用方法

 

下载请到原帖:http://www.vjsdn.net/bbs/bbsTopicDetails.aspx?pid=112071224

posted on 2010-07-28 14:07  raychn  阅读(2512)  评论(2编辑  收藏  举报