`
songqping
  • 浏览: 30609 次
  • 性别: Icon_minigender_2
  • 来自: 昆明
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

DevExpress 换肤

阅读更多

DevExpress 换肤
原帖地址:(不好意思啊,弄丢了)
转贴地址:http://wallimn.iteye.com/blog/374807

特感谢作者;

为软件换肤,是一个永恒的主题,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();



或者:  string skinName = e.Item.Caption;  //没测试MDI窗体
            DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle(skinName);
  
  现在,大部分的问题都解决了,最后一个问题,怎样在设置皮肤时,将所有已打开的窗口的皮肤都改成对应的样式呢?(在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集合已变化,无法枚举!”,郁闷。只好用观察者模式了。被观察者的类如下:
using System;
using System.Collections.Generic;
using System.Text;
using TimerApp.Forms;

namespace TimerApp.Utils
{
    public class SkinSubject
    {
        private static SkinSubject subject = null;
        private List<BaseForm> forms = new List<BaseForm>();

        public static SkinSubject GetInstance()
        {
            if (subject == null) subject = new SkinSubject();
            return subject;
        }

        private SkinSubject() { }
       
        /// <summary>
        /// 注册观察者
        /// </summary>
        /// <param name="f"></param>
        public void Register(BaseForm f)
        {
            forms.Add(f);
        }

        /// <summary>
        /// 注销观察者
        /// </summary>
        /// <param name="f"></param>
        public void UnRegister(BaseForm f)
        {
            forms.Remove(f);
        }

        /// <summary>
        /// 修改每个观察者的皮肤
        /// </summary>
        /// <param name="skinName"></param>
        public void Notify(string skinName)
        {
            foreach (BaseForm f in forms)
                f.DefaultLookAndFeel.LookAndFeel.SkinName = skinName;
        }
    }
}
  这并不是一个标准的观察者模式,它又混合了singon模式,因为被观察者只有一个,且,不需要回调观察者中方法。

  注:DevExpress中的默认皮肤名的取得:DevExpress.Skins.SkinManager.DefaultSkinName
分享到:
评论

相关推荐

    DevExpress换肤

    使用DevExpress为自己的窗体实现换肤功能是很方便的,可以轻松的实现类似Outlook,office2007等等类似的界面

    devExpress循环换肤.txt

    DevExpress是一个全家桶式的第三方控件,Delphi下的dev循环换肤,本人做的简单换肤代码,请大家捧场,抛砖引玉罢了。如有更好方案请留言,谢谢大家赞助积分。

    DevExpress的defaultLookAndFeel换肤工具实现整个项目中所有窗体同时换肤

    DevExpress的defaultLookAndFeel换肤工具实现整个项目中所有窗体同时换肤

    最新DevExpress DotNet控件+使用方法

    今用到DevExpress v9.2,想到换肤,参考了博友DevExpress换肤手把手教程.贡献出来给大家参考.

    devexpress.winform.skins换肤DEMO

    devexpress.winform.skins换肤DEMO

    DevExpress 主界面设计

    使用 DevExpress 简单的做了一个主界面,使用了 RibbonForm ,RibbonControl,xtraTabControl 控件。支持换肤、多Form在主界面的xtraTabControl中显示

    WPF结合DEV换肤

    WPF结合DEV换肤 WPF自带的控件一起换肤 大神们可以根据小弟的代码再做改进

    dev RibbonForm换肤

    DevExpress点滴学习--换肤 dev RibbonForm换肤 具体方法,详细代码

    SkinAdapter 源码 及范例

    SkinAdapter是一款用于DynamicSkinForm和BusinessSkinForm里的一个控件,可以在不修改源代码的情况下对第三方控件进行换肤,如可以对WebBrowser, DevExpress QuantumGrid, TMS Unicode controls, TRichView, ...

    SkinAdapter试用版:对第三方控件进行换肤,对于购买BusinessSkinForm VCL 和 DynamicSkinForm VCL

    SkinAdapter是一款用于DynamicSkinForm和BusinessSkinForm里的一个控件,可以在不修改源代码的情况下对第三方控件进行换肤,如可以对WebBrowser, DevExpress QuantumGrid, TMS Unicode controls,

    C#智能制造快速开发框架

    C#仓库管理系统+完整项目源代码,软件具备换肤功能,系统功能完备。

    Delphi编程大师2003 1of5

    换肤功能控件 自动缩放数据表格 V1.0 平滑字体控件包 V1.1 应用程序病毒免疫控件 V1.21 以可视鼠标拖放的方式产生 SQL 语句的可视构件 UCCOMP AExcel组件 模拟音响设备中纵向彩色LED指示表的控件 类似音响设备中立体...

    Delphi编程大师2003 5of5

    换肤功能控件 自动缩放数据表格 V1.0 平滑字体控件包 V1.1 应用程序病毒免疫控件 V1.21 以可视鼠标拖放的方式产生 SQL 语句的可视构件 UCCOMP AExcel组件 模拟音响设备中纵向彩色LED指示表的控件 类似音响设备中立体...

    Delphi编程大师2003 3of5

    换肤功能控件 自动缩放数据表格 V1.0 平滑字体控件包 V1.1 应用程序病毒免疫控件 V1.21 以可视鼠标拖放的方式产生 SQL 语句的可视构件 UCCOMP AExcel组件 模拟音响设备中纵向彩色LED指示表的控件 类似音响设备中立体...

    Delphi编程大师2003 2of5

    换肤功能控件 自动缩放数据表格 V1.0 平滑字体控件包 V1.1 应用程序病毒免疫控件 V1.21 以可视鼠标拖放的方式产生 SQL 语句的可视构件 UCCOMP AExcel组件 模拟音响设备中纵向彩色LED指示表的控件 类似音响设备中立体...

    Delphi编程大师2003 4of5

    换肤功能控件 自动缩放数据表格 V1.0 平滑字体控件包 V1.1 应用程序病毒免疫控件 V1.21 以可视鼠标拖放的方式产生 SQL 语句的可视构件 UCCOMP AExcel组件 模拟音响设备中纵向彩色LED指示表的控件 类似音响设备中立体...

    皮肤控件研究文档,破解后的库文件,皮肤设计工具使用教程

    皮肤组件能完全自动的为您的应用程序添加支持换肤功能,甚至不需要更改您的设计好的Form以及添加一行代码!您 也不再需要花费很多时间来使得自己的应用程序更漂亮。 3 选择皮肤组件产品时需要考虑的几个因素: 3.1...

Global site tag (gtag.js) - Google Analytics