在本篇介绍的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框架界面中改变并存储界面皮肤样式的更多相关文章

  1. Winform界面中主从表编辑界面的快速处理

    在Winform开发中,我们往往除了常规的单表信息录入外,有时候设计到多个主从表的数据显示.编辑等界面,单表的信息一般就是控件和对象实体一一对应,然后调用API保存即可,主从表就需要另外特殊处理,本随 ...

  2. QT向界面中嵌套新的界面

    简单说下 想要实现的内容 我们有一个主窗口mainwindow,需要向其中放入新的界面,你可以自己定义里面内容. 大致的效果图如下 实现起来就是利用QT的layout布局 使用水平布局QHboxlay ...

  3. 二十四、小程序中改变checkbox和radio的样式

    来源:https://blog.csdn.net/qq_39364032/article/details/79742415 在微信小程序里面,有时候为了配合整个项目的风格,checkbox和radio ...

  4. Winform界面中实现通用工具栏按钮的事件处理

    在一个给客户做的项目中,界面要求修改增加通用工具栏按钮的事件处理,也就是在主界面中放置几个固定的功能操作按钮,打开不同的页面的时候,实现对应页面的功能处理,这种和我标准的界面处理方式有所不同,标准的列 ...

  5. 在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理

    在基于DevExpress的多文档窗口界面中,我们一般使用XtraTabbedMdiManager来管理多文档窗口的一些特性,如顶部菜单,页面的关闭按钮处理,以及一些特殊的设置,本篇随笔介绍这些特点, ...

  6. Winform框架中窗体基类的用户身份信息的缓存和提取

    在Winform开发中,有时候为了方便,需要把窗体的一些常规性的数据和操作函数进行封装,通过自定义基类窗体的方式,可以实现这些封装管理,让我们的框架统一化.简单化的处理一些常规性的操作,如这里介绍的用 ...

  7. 在Winform界面中实现对多文档窗体的参数传值

    在Winform界面中窗体我们一般使用多文档进行展示,也就是类似一般的选项卡的方式可以加载多个窗体界面.一般来说,我们如果打开新的窗体,给窗体传递参数是很容易的事情,但是在框架层面,一般的窗体是通过动 ...

  8. C# Winform 界面中各控件随着窗口大小变化

    在做一项工程中,由于不确定目标平台的分辨率,而正常使用要求铺满整个屏幕,所以界面中的各个控件必须能够适应窗口的变化. 首先想到的就是控件的百分比布局,但是再尝试写了几个控件的Location和Size ...

  9. 代码生成工具更新--快速生成Winform框架的界面项目

    在之前版本的代码生成工具Database2Sharp中,由于代码生成都是考虑Winform和Web通用的目的,因此Winform界面或者Web界面都是单独生成的,在工具中生成相应的界面后,复制到项目里 ...

随机推荐

  1. Kotlin入门(26)数据库ManagedSQLiteOpenHelper

    共享参数毕竟只能存储简单的键值对数据,如果需要存取更复杂的关系型数据,就要用到数据库SQLite了.尽管SQLite只是手机上的轻量级数据库,但它麻雀虽小.五脏俱全,与Oracle一样存在数据库的创建 ...

  2. Java相关问题整理

    1. OkHttpClient调用出现大量CLOSE_WAIT. 问题定位: 凡是系统中出现大量的CLOSE_WAIT,说明你的代码写的有问题,即:没有关闭连接. 在OkHttpClient中,默认时 ...

  3. DAY5(PYTHON) 字典的增删改查和dict嵌套

    一.字典的增删改查 dic={'name':'hui','age':17,'weight':168} dict1={'height':180,'sex':'b','class':3,'age':16} ...

  4. sqlserver——cube:多维数据集

    1.cube:生成多维数据集,包含各维度可能组合的交叉表格,使用with 关键字连接 with cube 根据需要使用union all 拼接 判断 某一列的null值来自源数据还是 cube 使用G ...

  5. xtrabackup部署以及使用

    简介 备份mysql数据库一直是一个比较恶心的工作,主要就是备份的数据库比较大实在是慢.最近开始使用xtrabackup来备份数据库,速度上快了很多,尤其还原速度要快的多.下面我将从安装开始简要介绍一 ...

  6. mysql建表基本语法

    mysql添加约束的两种条件: ------表的内部添加(约束) 列名1 数据类型 (int) primary key auto_increment,---主键默认不能为空的 列名2 数据类型 not ...

  7. C++ 标准 和 C 标准 (截止到2019年03月)

    C++ 标准:维基百科 Year C++ Standard Informal name 1998 ISO/IEC 14882:1998[23] C++98 2003 ISO/IEC 14882:200 ...

  8. 【Ubuntu16.04.4】常用配置

    1.为root用户设置密码 sudo passwd root 2.设置用户登陆界面 sudo gedit  /usr/share/lightdm/lightdm.conf.d/50-unity-gre ...

  9. 通过一篇YAML来学习YAML

    yaml 兼容 json,至今已发展至 1.2版.支持N多种编程语言.官网:http://www.yaml.org/ 格式在线校验:http://nodeca.github.io/js-yaml/ 下 ...

  10. HBase数据库相关基本知识

    HBase数据库相关知识 1. HBase相关概念模型 l  表(table),与关系型数据库一样就是有行和列的表 l  行(row),在表里数据按行存储.行由行键(rowkey)唯一标识,没有数据类 ...