界面组件Telerik UI for WinForms中文教程 - 创建明暗模式的桌面应用

黑暗模式现在在很多应用程序中都挺常见的,但如何在桌面应用程序中实现它呢?这很简单,本文将为大家介绍如何使用一个类和命令行调用来实现!

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。

获取Telerik UI for WinForms新版下载(Q技术交流:726377843)

为了实现黑暗主题,我们将使用Fluent Dark,对于day主题将使用Fluent,如果您喜欢也可以指定另一个主题。

下面是一个Fluent主题控件的示例:

界面组件Telerik UI for WinForms中文教程

下面是Fluent Dark Theme的一个示例:

界面组件Telerik UI for WinForms中文教程

在演示应用程序中,白天和夜晚主题看起来像这样:

界面组件Telerik UI for WinForms中文教程

界面组件Telerik UI for WinForms中文教程

实现Day/Night菜单

在您的主表单中,添加这行代码:

public RadForm1()
{
InitializeComponent();
_ = new DayNight(this);
}

创建并添加DayNight类到您的项目中:

using System;
using Telerik.WinControls;
using Telerik.WinControls.UI;namespace TelerikWinFormsApp1;
internal class DayNight
{
private bool themeDay;
private RadImageButtonElement signInButton;public DayNight(RadForm form)
{
new Telerik.WinControls.Themes.FluentTheme().DeserializeTheme();
new Telerik.WinControls.Themes.FluentDarkTheme().DeserializeTheme();CreateDayNightButton(form);themeDay = Telerik.WinControls.WindowsSettings.AppsUseLightTheme;SetDayNight();
}private void CreateDayNightButton(RadForm form)
{
daynightButton = new RadImageButtonElement
{
ThemeRole = "TitleBarMinimizeButton",
Text = "☾",
DisplayStyle = DisplayStyle.Text,
ShowBorder = false,
AutoSize = false,
Size = form.FormElement.TitleBar.MinimizeButton.Size
};
daynightButton.Click += DayNight_Click;
form.FormElement.TitleBar.SystemButtons.Children.Insert(0, daynightButton);
}private void DayNight_Click(object sender, EventArgs e)
{
themeDay = !themeDay;
SetDayNight();
}
private void SetDayNight()
{
if (themeDay)
{
ThemeResolutionService.ApplicationThemeName = "Fluent";
signInButton.Text = "☾";
}
else
{
ThemeResolutionService.ApplicationThemeName = "FluentDark";
signInButton.Text = "☼";
}
}
}

如果您不喜欢用Windows默认主题启动应用程序,可以删除从Windows注册表读取设置的代码:

themeDay = Telerik.WinControls.WindowsSettings.AppsUseLightTheme;

并将themeDay变量设置为白天为true,夜晚为false:

themeDay = true;

RadForm的标题栏中的按钮是由CreateDayNightButton函数创建的:

private void CreateDayNightButton(RadForm form)
{
daynightButton = new RadImageButtonElement
{
ThemeRole = "TitleBarMinimizeButton",
Text = "☾",
DisplayStyle = DisplayStyle.Text,
ShowBorder = false,
AutoSize = false,
Size = form.FormElement.TitleBar.MinimizeButton.Size
};
daynightButton.Click += DayNight_Click;
form.FormElement.TitleBar.SystemButtons.Children.Insert(0, daynightButton);
}

DayNight_Click在主题之间切换:

private void DayNight_Click(object sender, EventArgs e)
{
themeDay = !themeDay;
SetDayNight();
}

SetDayNight()执行这些更改:

private void SetDayNight()
{
if (themeDay)
{
ThemeResolutionService.ApplicationThemeName = "Fluent";
signInButton.Text = "☾";
}
else
{
ThemeResolutionService.ApplicationThemeName = "FluentDark";
signInButton.Text = "☼";
}
}

这个命令改变了整个应用程序的主题:

ThemeResolutionService.ApplicationThemeName = "Fluent";
总结

Telerik UI for WinForms和它的主题使实现WinForms应用程序的暗模式变得很容易,可以在自己的应用程序中使用这个DayNight类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/210724.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++算法入门练习——相同的二叉查找树

将第一组n​个互不相同的正整数先后插入到一棵空的二叉查找树中,得到二叉查找树T1​;再将第二组n个互不相同的正整数先后插入到一棵空的二叉查找树中,得到二叉查找树T2​。判断T1​和T2​​是否是同一棵二叉查找树。 二叉查找(搜索)树定义&am…

GPRS电表和4G电表有哪些区别?

随着科技的不断进步,通信技术在智能电网中的应用越来越广泛。其中,GPRS电表和4G电表作为两种常见的远程智能抄表方案,为广大用户带来了便捷的用电管理体验。然而,这两种电表在技术特点、应用场景等方面存在一定差异。下面&#xf…

用rs-convert.exe提取d415拍摄的bag文件中的图片

首先给出intel官方说明,如图1. 使用过程:1.找到rs-convert.exe,一般都是在C:\Program Files (x86)\Intel RealSense SDK 2.0\tools。 2.打开文件夹后输入cmd,如图2,就会弹出命令窗口。 3.在命令窗口输入。 rs-conve…

Python入门教程之条件语句与运算符优先级详解

文章目录 Python 条件语句Python运算符优先级关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 Python 条件语句 …

操作系统实验一:进程和线程

文章目录 实验内容一、进程的创建1、编辑源程序2、编辑结果3、编译和运行程序4、解释运行结果 二、进程共享1、运行2、解释运行结果 三、进程终止1、运行2、解释运行结果 四、进程同步1、运行2、解释运行结果 五、Linux中子进程映像的重新装入1、运行2、解释运行结果 六、线程1…

baksmali使用

帮助文档,查看版本 baksmali可以用来反编dex文件 查看版本 反编译apk 可以在当前目录下面得到一个out目录 指定输出文件夹名称 反编译dex 反编译dex文件,得到汇编代码 baksmali du /home/kali/Desktop/classes.dex >out.txt

python爬虫中 HTTP 到 HTTPS 的自动转换

前言 在当今互联网世界中,随着网络安全的重要性日益增加,越来越多的网站采用了 HTTPS 协议来保护用户数据的安全。然而,许多网站仍然支持 HTTP 协议,这就给我们的网络爬虫项目带来了一些挑战。为了应对这种情况,我们需…

MySQL-01-MySQL基础架构

1-MySQL逻辑结构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。 MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处…

vue实现聊天栏定位到最底部(超简单、可直接复制使用)

原理 通过watch监听聊天内容的加载,一旦加载完成或者数据更新触发vue的数据监听时,就重新修改【滚动滑钮到滚动条顶部的距离滚动条的高度】,从而实现定位到底部的效果。 实现 1、布局 新建一个div(聊天框,如下&…

python3迭代器与生成器

迭代器 迭代是访问集合元素的一种方式,是一个可以遍历记住的位置的对象 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter()和next&#x…

TIDB拓扑结构

TiDB Server:SQL层,负责接受客户端的连接,执行SQL解析和优化,最终生成分布式执行计划。TiDB Server为无状态的,可增加节点负载均衡。 PD (Placement Driver) Server:整个TiDB集群的元信息管理模块&#xf…

2023APMCM亚太杯数学建模选题建议及初步思路

大家好呀,亚太杯数学建模开始了,来说一下初步的选题建议吧: 首先定下主基调,本次亚太杯推荐选择B题。 C题如果想做好,搜集数据难度并不低,并且模型比较简单,此外目前选择的人数过多&#xff0c…