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窗体代码如下:

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
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方法设置皮肤。

本程序类关系图
2010072814035316.png

 

皮肤名:Caramel
2010072814042346.png

 

皮肤名:Black

2010072814045262.png

 

皮肤名:Blue

2010072814053423.png

 

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

 

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

转载于:https://www.cnblogs.com/raychn/archive/2010/07/28/1786975.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值