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



目录
相关文章
|
24天前
|
UED
Qt侧边栏的动态展示:隐藏与呈现技术详解
在现代用户界面设计中,侧边栏(Sidebar)是一个常见的组件,它为用户提供了便捷的导航和操作入口。在Qt框架中,实现侧边栏的隐藏与呈现不仅能够提升应用的美观度,还能增强用户体验。本文将详细介绍如何在Qt中实现侧边栏的动态隐藏与呈现,包括技术要点和代码实现。
48 0
|
4月前
|
图形学
小功能⭐️Unity自动更改文本框高度,以显示全部文本
小功能⭐️Unity自动更改文本框高度,以显示全部文本
|
4月前
|
开发框架 前端开发 搜索推荐
在WInform开发中实现工具栏/菜单的动态呈现
在WInform开发中实现工具栏/菜单的动态呈现
|
7月前
|
移动开发
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
|
6月前
|
前端开发 程序员 UED
全面解析layui:掌握基础知识与实用技能(1. 核心组件与模块 2. 布局与容器 3. 弹出层与提示框;1. 数据表格与数据表单 2. 表单验证与提交 3. 图片轮播与导航菜单)
全面解析layui:掌握基础知识与实用技能(1. 核心组件与模块 2. 布局与容器 3. 弹出层与提示框;1. 数据表格与数据表单 2. 表单验证与提交 3. 图片轮播与导航菜单)
82 0
|
JavaScript 前端开发
storybook让组件自动形成好看的文档~
storybook让组件自动形成好看的文档~
627 0
|
前端开发 JavaScript API
交互设计:隐藏或显示大段文本的UI组件有哪些?
应用场景: 在手机上要给列表中的每一项添加一个大段的介绍,应该用什么UI组件 A: 这里可以用,模态对话框,弹出提示,工具提示这类组件。模态对话框的好处,就是用关闭的按钮,用户操作方便;而弹出提示和工具提示只能通过点击来切换   模态对话框: http://v2.bootcss.com/javascript.html#modals http://www.runoob.com/bootstrap/bootstrap-modal-plugin.html Bootstrap 模态框(Modal)插件 模态框(Modal)是覆盖在父窗体上的子窗体。
1539 0
SwiftUI—借助sizeCategory预览不同字体下的文本视图
SwiftUI—借助sizeCategory预览不同字体下的文本视图
167 0
SwiftUI—借助sizeCategory预览不同字体下的文本视图
QT软件开发: 将QGraphicsView视图界面保存为图片
QT软件开发: 将QGraphicsView视图界面保存为图片
853 0
QT软件开发: 将QGraphicsView视图界面保存为图片
|
图形学
Unity 基础 之 自定义编辑器布局
Unity 是一个强大的开发引擎,一起来认识一下编辑器布局吧。看看如何才能调整出你想要的布局吧,调整后果然舒适哦~
460 0