C#实现DevExpress控件换肤功能
作者:C/S框架网  发布日期:2011/07/13 22:27:53
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;
   }

}


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



C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


上一篇 下一篇