在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框架界面中改变并存储界面皮肤样式,如需转载请自行联系原博主。



目录
相关文章
|
6月前
|
前端开发 数据可视化 网络协议
GIS前端-图形样式编辑
GIS前端-图形样式编辑
34 0
|
10月前
|
数据可视化 JavaScript 前端开发
ElementUI实现表格内嵌进度条功能
ElementUI实现表格内嵌进度条功能
382 1
|
前端开发
Dreamweaver软件设置更改表格颜色的操作方法
Dreamweaver软件设置更改表格颜色的操作方法
591 0
|
自然语言处理 编译器 C#
【WPF】实现动态切换语言(国际化)以及动态换肤功能
以下内容,手把手从搭建到最终实现,完成多语言切换以及换装功能。
305 0
【WPF】实现动态切换语言(国际化)以及动态换肤功能
|
JavaScript 前端开发
storybook让组件自动形成好看的文档~
storybook让组件自动形成好看的文档~
422 0
|
设计模式
带你造轮子,自定义一个随意拖拽可吸边的悬浮View组件
在开发中,随意拖拽可吸边的View还是比较常见的,这种功能网上也有各种各样的轮子,其实写起来并不复杂,看完本文,你也可以手写一个,不到400行代码就能实现一个通用的随意拖拽可吸边的View组件。
522 1
SwiftUI—借助sizeCategory预览不同字体下的文本视图
SwiftUI—借助sizeCategory预览不同字体下的文本视图
120 0
SwiftUI—借助sizeCategory预览不同字体下的文本视图
QT软件开发: 将QGraphicsView视图界面保存为图片
QT软件开发: 将QGraphicsView视图界面保存为图片
772 0
QT软件开发: 将QGraphicsView视图界面保存为图片
|
Web App开发
艾伟:WinForm控件开发总结(七)-----为复杂属性的子属性提供编辑功能
前面的几篇文章中,我们给控件添加一个复杂的类型Scope,并且给它的类型提供的一个类型转换器,现在我们可以在属性浏览器中编辑它的值,并且它的值也被串行化的源代码里了。但是你有没有发现,在属性浏览器里编辑这个属性的值还是不太方便。
663 0
|
SQL JavaScript 前端开发
【自然框架】之鼠标点功能现(二):表单控件的“应用”—— 代码?只写需要的!
  【自然框架】之鼠标点功能现(一):单表的增删改查(即上次5月23日活动的一个主题)【Demo、源码下载】           看了大家的回复,好像不少人误会了,我为了突出“鼠标点,功能现”,所以没有说代码,没有贴代码,这就让一些人认为我想要完全抛弃VS,自己写一个“平台”来代替,不好意思,您高估我了,我可达不到。
842 0