`

DevExpress 换肤

阅读更多
原帖地址:(不好意思啊,弄丢了)

特感谢作者;

为软件换肤,是一个永恒的主题,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换肤"这个主题是关于如何利用DevExpress提供的皮肤系统,为你的Windows Forms或WPF应用程序定制各种视觉样式,以达到类似于Outlook、Office 2007等知名应用的界面效果。 在DevExpress中,皮肤(Skin)是...

    devExpress循环换肤.txt

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

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

    DevExpress 的 defaultLookAndFeel 换肤工具实现整个项目中所有窗体同时换肤 DevExpress 的 defaultLookAndFeel 换肤工具是 DevExpress 中的一个重要组件,能够帮助开发者快速实现项目中的换肤功能。然而,很多...

    最新DevExpress DotNet控件+使用方法

    在描述中提到的"DevExpress换肤手把手教程",可能是指导如何利用DevExpress的皮肤管理器来改变控件的外观。这通常涉及以下几个步骤: 1. **导入皮肤**:首先,需要将预定义的皮肤文件导入到项目中。这些皮肤文件...

    dev RibbonForm换肤

    #### 一、DevExpress 换肤概述 DevExpress 是一款非常强大的 UI 控件库,广泛应用于 .NET 应用程序开发中。DevExpress 提供了丰富的控件来帮助开发者快速构建美观且功能强大的应用程序。其中 RibbonForm 控件是 ...

    devexpress.winform.skins换肤DEMO

    这个"devexpress.winform.skins换肤DEMO"应该是一个演示项目,旨在帮助开发者理解并学习如何在WinForms应用中使用DevExpress的皮肤功能。 在Windows Forms应用中,皮肤通常指的是用户界面的外观,包括颜色、字体、...

    WPF结合DEV换肤

    在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 应用程序中结合DevExpress (DEV) 控件实现自定义皮肤换肤功能。WPF是.NET Framework的一部分,提供了丰富的用户界面开发工具,而DevExpress则...

    DevExpress 主界面设计

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

    c#winform + DevExpress 界面布局,换肤,菜单栏

    简单的 c#winform + DevExpress 实例,新手可以学习到界面布局,主题更换,菜单栏制作等

    WinFroms换肤.rar

    2. **第三方库**:如`DevExpress`、`Telerik`等提供了丰富的UI组件,它们内置了多套皮肤,可以直接应用到WinForms应用中。此外,还有开源的`SkinManager`库,它可以方便地集成到项目中,实现皮肤切换。 3. **自定义...

    C#窗体换肤演示源码

    2. **使用皮肤库**:有许多第三方库和组件,如DevExpress、Telerik等,它们提供了丰富的皮肤库,可以直接应用到窗体和控件上,简化了换肤过程。 3. **XML配置文件**:通过读取XML配置文件,动态加载不同的皮肤设置...

    vb c#等基于.net的换肤工具

    对于VB.NET和C#开发者而言,有多种第三方库和组件可用于实现这一功能,例如DevExpress、Telerik、Infragistics等,它们提供了丰富的皮肤和主题选择。 换肤工具通常包含以下关键特性: 1. **皮肤库**:内置多种预设...

    VB窗体换肤的界面控件

    1. **添加控件**:从Visual Studio的工具箱中,找到皮肤管理器控件(可能需要先安装相关的控件库,如DevExpress或Telerik等),将其拖放到窗体上。 2. **配置控件**:设置皮肤管理器的属性,如默认皮肤、是否允许...

    C#皮肤大全(带换肤工具)

    - **使用第三方库**:有一些开源或商业的第三方库,如DevExpress、Telerik等,它们提供了丰富的皮肤和组件,可以直接应用于C#项目中。 - **自定义皮肤**:开发者也可以根据需求自行设计皮肤,通过继承自WPF或...

    dot net下实现winform窗体换肤

    3. **第三方组件**:市场上有许多第三方控件集,如DevExpress、Telerik等,它们提供了丰富的预设皮肤,并且支持自定义。这些组件库不仅包含皮肤功能,还可能包含其他高级特性,如数据绑定、报表等,能大大提升开发...

    c# 美化界面 换肤 遍历页面控件

    此外,还可以利用第三方库,如DevExpress、Telerik等,它们提供丰富的预设皮肤和强大的界面设计工具,可以快速创建出专业级别的界面效果。 总的来说,C#中的界面美化与换肤是一个涉及多个技术领域的过程,包括但不...

    C#实现窗体换肤完整源码

    3. **使用皮肤库**:有些开发者会选择使用第三方库,如DevExpress、Telerik等,它们提供了丰富的皮肤库和便捷的换肤机制。集成这些库可以快速实现皮肤功能,但可能需要购买授权。 4. **主题切换**:在程序中添加一...

    C#实现窗体换肤完整源码__0525.rar

    - 为了简化窗体换肤过程,一些开源库如SkinManager、DevExpress等提供了丰富的皮肤选择和易于使用的API。 - 这些库通常包含一个皮肤管理器,允许动态加载和切换皮肤,以及支持各种控件类型的皮肤。 4. **皮肤文件...

    winform换肤控件

    例如,DevExpress、Telerik等公司提供了丰富的UI控件库,其中包含换肤功能。这些库通常提供API,使得开发者能够轻松地为应用添加换肤功能。 在实际开发中,使用WinForm换肤控件需要注意以下几点: 1. **皮肤设计**...

    C#换肤(2005)

    许多流行的第三方控件套件如DevExpress和Telerik提供了一系列内置的皮肤,并且通过简单的API调用即可实现快速换肤。这意味着开发者无需深入了解绘图API,也可以轻松实现丰富的视觉效果。例如,通过调用控件的一个...

Global site tag (gtag.js) - Google Analytics