为软件换肤,是一个永恒的主题,winforms换肤,现在b/s也换肤。呵呵。
  在devexpress中,换肤就很简单,不需要我们自己去制造皮肤,官文就有很丰富的皮肤包。下面来讲解一下这个问题。
  注意,我这儿用的是DevExpress 8.1.5,在老版本中可能不支持。如果是7.x的版本,请见demo中的源代码。
  第一步:让所有窗体都从DevExpress.XtraEditors.XtraForm继承。
  第二步:添加两个引用:
  DevExpress.BonusSkins.v8.1
  DevExpress.OfficeSkins.v8.1
  第三步:在软件的入口Program类的main函数的第一行代码前加上:
            DevExpress.UserSkins.BonusSkins.Register();
            DevExpress.UserSkins.OfficeSkins.Register();
            DevExpress.Skins.SkinManager.EnableFormSkins();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new FormMain());
  第四步:每个窗口放个DefaultLookAndFeel控件,
  第五步:软件往往有个设置皮肤的地方,这个地方往往是需要枚举出所有皮肤的,把皮肤全部枚举出来放到一个ComboBoxEdit中,代码如下:
            foreach (DevExpress.Skins.SkinContainer skin in DevExpress.Skins.SkinManager.Default.Skins)
                cmbAppStyle.Properties.Items.Add(skin.SkinName);
  第六步:设置皮肤,怎样设置皮肤呢,只需设置每个窗口的DefaultLookAndFeel即可,代码如下:
  this.defaultLookAndFeel1.LookAndFeel.SkinName = cmbAppStyle.EditValue.ToString();
  
   现在,大部分的问题都解决了,最后一个问题,怎样在设置皮肤时,将所有已打开的窗口的皮肤都改成对应的样式呢?(在DevExpress8.1.5中, 这个功能自带,但是,并不完全,有缺陷)最基本的方法当然是观察者模式,但是,我想到在winforms中应当有枚举所有已打开窗口的方法。果然,找到 了:Application.OpenForms,再说明一下,为了能统一管理所有窗口的皮肤,我写了个基类,BaseForm,它继承自 DevExpress.XtraEditors.XtraForm。在BaseForm中放个DefaultLookAndFeel。并创建一个公共的属 性DefaultLookAndFeel。然后,在设置皮肤的地方写上:
  foreach (Form f in Application.OpenForms)
    if (f is TimerApp.Forms.BaseForm)
       (f as TimerApp.Forms.BaseForm).DefaultLookAndFeel.LookAndFeel.SkinName = value;
  但是,这个方法有问题,出错了,说什么“OpenForms集合已变化,无法枚举!”,郁闷。只好用观察者模式了。被观察者的类如下:

DevExpress换肤手把手教程using System;
DevExpress换肤手把手教程
using System.Collections.Generic;
DevExpress换肤手把手教程
using System.Text;
DevExpress换肤手把手教程
using TimerApp.Forms;
DevExpress换肤手把手教程
DevExpress换肤手把手教程
namespace TimerApp.Utils
  注:DevExpress中的默认皮肤名的取得:DevExpress.Skins.SkinManager.DefaultSkinName


相关文章:

  • 2022-12-23
  • 2021-07-23
  • 2021-09-02
  • 2021-07-26
  • 2022-01-18
  • 2021-08-12
猜你喜欢
  • 2021-09-14
  • 2022-12-23
  • 2021-08-13
  • 2021-12-24
  • 2021-12-11
  • 2021-11-30
相关资源
相似解决方案