您的位置:首页 > Web前端 > JavaScript

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

2010-07-28 14:07 471 查看
在写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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: