在Winform框架界面中改变并存储界面皮肤样式的方法

 更新时间:2017年11月29日 11:01:45   作者:伍华聪  
下面小编就为大家分享一篇在Winform框架界面中改变并存储界面皮肤样式的方法,具有很好的参考价值,希望对大家有所帮助

在本篇介绍的Winform界面样式改变及存储操作中,是指基于DevExpress进行界面样式的变化。一般情况下,默认我们会为客户提供多种DevExpress的界面皮肤以供个人喜好选择,默认DevExpress提供40余种皮肤样式,用户可以根据自己的喜好,选择较为美观、得体的皮肤,为了方便,我们对用户的皮肤选择进行记录,并可以动态改变。

1、界面皮肤的选择

Winform开发框架(包括混合式Winform开发框架)皮肤如下界面所示。

在皮肤集合中打开,可以看到很多界面皮肤可供选择

上面初始化的皮肤代码,是通过调用SkinHelper的DevExpress内在辅助类实现的,通过添加一个RibbonGalleryBarItem控件对象,然后添加如下代码实现的

DevExpress.XtraBars.Helpers.SkinHelper.InitSkinGallery(rgbiSkins, true);

以及在Ribbon控件上添加一个小的皮肤下拉按钮,如下代码所示

this.ribbonControl.Toolbar.ItemLinks.Clear();
this.ribbonControl.Toolbar.ItemLinks.Add(rgbiSkins);

如果我们固定设置界面一种皮肤,那么调用下面的代码直接设置即可,如下所示。

UserLookAndFeel.Default.SetSkinStyle("Office 2010 Blue");

2、界面皮肤的保存和显示

不过,我们如果希望皮肤可以随意更改并可以存储到配置文件中,那么我们就需要对它进行一定的加工处理。

首先我们编写一个设置皮肤名称的函数,如下所示。

/// <summary>
  /// 设置用户界面的皮肤
  /// </summary>
  private void SetSkinStyle()
  {
   //从配置文件读取SkinName的值,如无则使用标准样式
   string skinName = config.AppConfigGet("SkinName");
   skinName = string.IsNullOrEmpty(skinName) ? "Office 2010 Blue" : skinName;

   foreach (GalleryItemGroup group in rgbiSkins.Gallery.Groups)
   {
    foreach (GalleryItem item in group.Items)
    {
     if (string.Concat(item.Tag) == skinName)
     {
      item.Checked = true;
      rgbiSkins.Gallery.MakeVisible(item);
      UserLookAndFeel.Default.SetSkinStyle(skinName);
      return;
     }
     item.Checked = false;
    }
   }
  }

这样我们在皮肤改变后,重新读取配置,并重新设置界面的皮肤即可。

那么我们需要实现RibbonGalleryBarItem控件对象的单击事件GalleryItemClick,

如下代码所示。

rgbiSkins.GalleryItemClick += (object sender, GalleryItemClickEventArgs e) =>
{
 config.AppConfigSet("SkinName", string.Concat(e.Item.Tag));
 SetSkinStyle();
};

这样综合起来就是两个函数代码实现了,如下所示

/// <summary>
  /// 初始化皮肤设置
  /// </summary>
  private void InitSkinStyle()
  {
   //初始化皮肤样式名称
   DevExpress.XtraBars.Helpers.SkinHelper.InitSkinGallery(rgbiSkins, true);
   rgbiSkins.GalleryItemClick += (object sender, GalleryItemClickEventArgs e) =>
   {
    config.AppConfigSet("SkinName", string.Concat(e.Item.Tag));
    SetSkinStyle();
   };
   this.ribbonControl.Toolbar.ItemLinks.Clear();
   this.ribbonControl.Toolbar.ItemLinks.Add(rgbiSkins);
   this.ribbonControl.Minimized = true;//默认最小化
   //UserLookAndFeel.Default.SetSkinStyle("Office 2010 Blue");
   SetSkinStyle();
  }

  /// <summary>
  /// 设置用户界面的皮肤
  /// </summary>
  private void SetSkinStyle()
  {
   //从配置文件读取SkinName的值,如无则使用标准样式
   string skinName = config.AppConfigGet("SkinName");
   skinName = string.IsNullOrEmpty(skinName) ? "Office 2010 Blue" : skinName;

   foreach (GalleryItemGroup group in rgbiSkins.Gallery.Groups)
   {
    foreach (GalleryItem item in group.Items)
    {
     if (string.Concat(item.Tag) == skinName)
     {
      item.Checked = true;
      rgbiSkins.Gallery.MakeVisible(item);
      UserLookAndFeel.Default.SetSkinStyle(skinName);
      return;
     }
     item.Checked = false;
    }
   }
  }

然后在主界面的初始化代码中进行调用即可,同时记得在App.Config文件中增加一个SkinName的配置项,方便程序进行存储皮肤名称。

这样就可以实现我们皮肤的变化及存储功能了,修改皮肤,并重启程序,系统依旧使用保存好的皮肤,功能符合预期。

这个功能不算复杂,提供代码方便大家进行复制使用。

以上这篇在Winform框架界面中改变并存储界面皮肤样式的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C#实现远程连接ORACLE数据库的方法

    C#实现远程连接ORACLE数据库的方法

    这篇文章主要介绍了C#实现远程连接ORACLE数据库的方法,通过自定义函数db_connection_test实现远程连接Oracle数据库的功能,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • C#泛型集合Dictionary<K,V>的使用方法

    C#泛型集合Dictionary<K,V>的使用方法

    这篇文章主要介绍了C#泛型集合Dictionary<K,V>的使用方法,本文讲解了Dictionary的多种操作方法,需要的朋友可以参考下
    2014-10-10
  • C#简单生成随机密码的方法示例

    C#简单生成随机密码的方法示例

    这篇文章主要介绍了C#简单生成随机密码的方法,结合具体实例形式分析了C#生成随机密码操作的前台界面与后台处理技巧,需要的朋友可以参考下
    2017-06-06
  • C#中实现网段扫描的代码

    C#中实现网段扫描的代码

    C#中实现网段扫描的代码...
    2007-04-04
  • C#验证用户输入信息是否包含危险字符串的方法

    C#验证用户输入信息是否包含危险字符串的方法

    这篇文章主要介绍了C#验证用户输入信息是否包含危险字符串的方法,可针对and、or、exec、insert、select等SQL操作技巧进行过滤操作,非常具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • C#多态详解

    C#多态详解

    这篇文章主要介绍了C#中的多态,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10
  • silverlight实现图片局部放大效果的方法

    silverlight实现图片局部放大效果的方法

    这篇文章主要介绍了silverlight实现图片局部放大效果的方法,结合实例形式分析了silverlight针对图片属性的相关操作技巧,需要的朋友可以参考下
    2017-03-03
  • 一个状态机的实现

    一个状态机的实现

    本文主要介绍了C#实现一个状态机的思路与方法,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • c#得到本月有几周和这几周的起止时间示例代码

    c#得到本月有几周和这几周的起止时间示例代码

    本篇文章主要是对c#得到本月有几周和这几周的起止时间的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • Unity实现卡拉OK歌词过渡效果

    Unity实现卡拉OK歌词过渡效果

    这篇文章主要为大家详细介绍了Unity实现卡拉OK歌词过渡效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06

最新评论