为 TDesignBlazor 添加暗黑模式

本文将讲述我为 TDesignBlazor 开源项目提交 PR 的经历,主要介绍暗黑模式功能的实现以及之后如何在项目中使用。我将会分享我在实现这一功能时遇到的问题,以及我是如何解决这些问题的。我希望通过我的经历能够鼓励更多的人参与开源项目,为 TDesignBlazor 贡献代码,帮助项目快速迭代。

文章目录

  • 1. 背景
  • 2. 开发过程
    • 2.1 实现原理
    • 2.2 TDesignBlazor 实现思路
  • 3. 最后

1. 背景

TDesign 是腾讯各业务团队在服务业务过程中沉淀的一套企业级设计体系。其支持业界主流的 React/Vue/Angular/微信小程序/Flutter 开发技术栈,并提供桌面端和移动端两套风格统一的组件资源,是一款界面和使用体验都无可挑剔的前端框架。

TDesign 官方是没有提供 Blazor 版本的支持,很幸运的是在我自己搭好了架子捣鼓了一个组件后,发现社区已经有了一个非常完善的 TDesignBlazor。毕竟工作量非常大,一个人的力量是有限的,需要社区的力量来支撑。也是刚好看到张队转载的文章,发起者在寻求 Blazor 爱好者参与,所以我决定加入进来,帮助维护和改进这个项目。这样就能够将 TDesign 的优秀设计和交互体验带到 Blazor 项目中,提高开发效率和用户体验。我相信社区的力量,我们一起能够完成这个目标。

2. 开发过程

TDesign 组件库提供了暗色模式,并且官方的演示站点是有暗黑模式的体验。这里我们要为 TDesignBlazor 项目的演示站点添加暗黑模式,并为使用该 Blazor 组件的项目提供简单的调用暗黑模式的方式。

2.1 实现原理

根据 TDesign 文档的介绍,我们只需要给网页的 html 标签增加 theme-mode 属性即可。其组件库会自动变换颜色模式,通过此种方式也可以设置不同的颜色主题。

在这里插入图片描述

其实现的原理也非常简单,组件库使用 css variables(自定义属性)实现颜色的定义,同时定义了 :root[theme-color="custom-theme"][theme-mode="dark"] 选择器来设置浅色/暗色模式两组不同的颜色值,然后通过 js 控制 html 标签的 theme-mode 属性:setAttributeremoveAttribute 来实现主题的切换。

我们可以在官方演示站点通过 F12 打开开发人员工具,审查 html 标签来看到这些信息:

在这里插入图片描述

2.2 TDesignBlazor 实现思路

通过文档我们已经了解到,暗色模式只需要通过 js 控制 html 标签的 theme-mode 属性:

// 设置暗色模式
document.documentElement.setAttribute('theme-mode', 'dark');
// 重置为浅色模式
document.documentElement.removeAttribute('theme-mode');

这里对于 TDesignBlazor 暗黑功能的实现,我们只需要通过 .NET 调用 JavaScript 函数即可。关于这一块的相关知识可以参考微软官方文档:《JavaScript 互操作》。

参与开源项目,首先我们要遵守项目的贡献指南,更要了解这个项目。在 TDesignBlazor 项目中,src 目录下是 TDesign 的 Blazor 类库和测试项目。doc 目录下是 Blazor 类库使用的演示站点,分为 ServerSide 和 WebAssembly 两种形式,Shared 是两者共用的部分。

搞清楚了项目的基本情况,我们就可以动手添加这一部分功能了。前面我们也讲到,最好是在 Blazor 类库中提供可以直接切换的方法。

首先,在 tdesign-blazor.js 添加相关的 js 方法。

/*** 暗黑模式* */
let theme = {/*** 浅色模式* */light: function () {document.documentElement.removeAttribute('theme-mode');},/*** 暗色模式* */dark: function () {document.documentElement.setAttribute('theme-mode', 'dark');}
}

TDesignExtensions.cs 是 TDesign 的扩展,我在里面添加 ChangeThemeMode 方法。

/// <summary>
/// 执行切换暗黑和浅色模式切换
/// </summary>
/// <param name="js"></param>
/// <param name="isDark">是否为暗黑模式</param>
public static async Task ChangeThemeMode(this IJSRuntime js, bool isDark = true)
{var jsObject = await js.ImportScriptAsync();await jsObject.InvokeVoidAsync(isDark ? "theme.dark" : "theme.light");
}

对于演示站点的修改,大部分工作主要是界面上的,集中在 doc/TDesign.Docs.Shared/Layouts/MainLayout.razor。这里需要添加一个 TInputRadioGroup 主题切换的按钮,样式按照官方站点设计即可。在需要执行主题切换调用的地方执行 JS.ChangeThemeMode 方法,如下:

@using Microsoft.JSInterop
@inject IJSRuntime JS<TInputRadioGroup @bind-Value="ThemeMode" OnValueSelected="@(e=>JS.ChangeThemeMode(e=="2"))" Size="Size.Medium" ButtonStyle="RadioButtonStyle.Outline"><TInputRadio Value="1">浅色</TInputRadio><TInputRadio Value="2">暗黑</TInputRadio>
</TInputRadioGroup>@code{int ThemeMode { get; set; } = 1;
}

3. 最后

《礼记·学记》中有这样一句:“学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。故曰教学相长也。”

参与开源项目和写文章也是学习的过程,这可以让你结交不同的朋友,学到更多的知识。项目的贡献不在于大小,每个人都可以做自己力所能及的事情。要相信众人拾柴的力量,这些细小的贡献最终将有助于推动开源社区变得更好。

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

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

相关文章

暗黑模式(黑暗模式,深色模式)适配

暗黑模式&#xff08;黑暗模式&#xff0c;深色模式&#xff09;适配 全局关闭 打开Info.plist 项目配置文件&#xff0c;添加UIUserInterfaceStyle字段&#xff0c;key类型为String&#xff0c; 其value值设置为 Light模式。 部分关闭 iOS13之后UIViewController与UIView …

太强了,英伟达面对ChatGPT还有这一招...

大家好&#xff0c;我是 Jack。 今年可谓是 AI 元年&#xff0c;ChatGPT、AIGC、VITS 都火了一波。 我也先后发布了这几期视频&#xff1a; 这是一个大模型的时代&#xff0c;AI 能在文本、图像、音频等领域大放异彩&#xff0c;得益于大模型。而想要预训练大模型&#xff0c…

让GPT-3、ChatGPT、GPT-4一起做脑筋急转弯,GPT-4一骑绝尘!

作者 | python 一个烙饼煎一面一分钟&#xff0c;两个烙饼煎两面几分钟&#xff1f; 让你来回答&#xff0c;是不是一不小心就掉到沟里了&#xff1f;如果让大语言模型来做这种脑筋急转弯会怎样呢&#xff1f;研究发现&#xff0c;模型越大&#xff0c;回答就越可能掉到沟里&a…

用ChatGPT学习多传感器融合中的基础知识

该列表会不定期更新… 文章目录 困惑与解答&#xff1a;问题&#xff1a;匈牙利算法中的增广矩阵路径是什么意思解答&#xff1a;个人理解概述&#xff1a; 问题&#xff1a;扩展卡尔曼滤波是非线性方程求解问题&#xff0c;是将非线性方程拟合为线性方程吗解答&#xff1a;个…

Edge 开发者日 · New Bing New Edge

在开始应用开发前&#xff0c;我们往往会面临着“Web 应用 or 原生应用”的选择。在通过 Microsoft Edge 进行 Web 开发时&#xff0c;WebView2 能够带给开发者兼具 Web 和本机平台的混合应用开发体验&#xff1b;而与此同时&#xff0c;随着 PWA&#xff08;Progressive Web A…

「图文教程」Windows系统Microsoft Edge浏览器设置搜索框搜索引擎为百度

相信使用过Microsoft Edge浏览器的朋友都有一个困扰&#xff0c;就是自带的Microsoft Edge浏览器不好用&#xff0c;但是想更换搜索引擎又不知道从哪里更换&#xff0c;下面小编就给大家带来Microsoft Edge浏览器更换搜索引擎为百度的教程。 1、打开Microsoft Edge浏览器&…

Microsoft Edge有哪些你不知道却超级好用的插件?(Microsoft Edge功能测评)

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:对Edge浏览器的简单测评,分享一些自己在使用好用的插件. 目录…

微软 Edge 配置百科 1.6 新版发布 让你可以随心所欲的配置、得心应手的使用Edge的小工具

EdgeTools 更新日志&#xff1a; 2023.05.27 EdgeTools 1.6 发布&#xff1a; 1、支持 113.0.1774.50 版Edge的新增配置。 2、部分功能和性能的优化。 2023.03.28 EdgeTools 1.5 发布&#xff1a; 1、新增文件菜单&#xff0c;支持导入、导出配置文件和…

微软 Edge 被指将用户访问的站点发送给Bing

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士 微软 Edge 浏览器似乎将用户访问的 URL 发送至 Bing API 网站。 上周&#xff0c;Reddit 用户率先发现 Edge 存在这些隐私问题&#xff0c;注意到最新的 Edge 版本将请求发送至 bingapis.c…

一款既有颜值又有实力的Edge浏览器插件——WeTab

目录 前言 推荐理由&#xff1a; 1.方便快捷的ChatGPT 2.适合摸鱼的小游戏 3.网站的快速访问 4.精美的壁纸切换 插件安装方法 总结 前言 我们知道&#xff0c;许多浏览器都可以安装扩展插件&#xff0c;有些插件的功能是非常不错的。下面我想推荐一款Edge浏览器的插件&…

屏蔽Edge浏览器的新闻推送,高效办公!

一、问题描述 每次打开浏览器想查询一些专业相关的知识时&#xff0c;总会被浏览器主页的一些“没营养的”新闻所牵绊&#xff0c;如下图所示。虽然我对这些新闻根本不感兴趣&#xff0c;但也做不到看了毫无感觉。因此&#xff0c;屏蔽这些新闻真的很有必要。我们需要获取什么…

拦截Edge的“根据热门内容向您推荐”

相信不少小伙伴因为广告、界面清洁度等原因&#xff0c;一直都使用谷歌浏览器Chrome 其实近年来&#xff0c;微软自带的浏览器Edge更新之后&#xff0c;使用体验感也非常不错。集锦、垂直标签页等辅助功能&#xff0c;登录微软账户随时可同步书签、设置&#xff0c;需要同时登录…

chatgpt赋能python:Python主网站的SEO优化

Python主网站的SEO优化 作为一名有10年Python编程经验的工程师&#xff0c;我一直非常关注Python官方网站的SEO优化&#xff0c;因为官方网站对于传播Python语言的影响至关重要。在这篇文章中&#xff0c;我将介绍一些Python主网站的SEO优化策略&#xff0c;并总结一些结论&am…

126页PPT干货分享:ChatGPT与数字化转型的业财融合(附下载链接)

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年5月份全网热门报告合集 无需翻墙&#xff0c;无需注册&#xff0c;ChatGPT4直接使用 ChatGPT提词手册&#xff0c;学完工作效率提升百倍 马斯克谈AI&#xff1a;中美差…

当人工智能ChatGPT参与创作 图书出版业应该如何应对?

ChatGPT引发全社会各行各业对人工智能持续保持高度关注。它已经改变了很多行业&#xff0c;接下来还将改变哪些领域&#xff0c;或者它一定不会改变什么&#xff0c;都是人们思考的热点。 人工智能的快速发展&#xff0c;给图书出版业也带来诸多影响。从积极的角度来说&#x…

chatgpt赋能python:Python如何画图:介绍与示例

Python如何画图&#xff1a;介绍与示例 Python是一种高级编程语言&#xff0c;它支持多种图形库&#xff0c;可以用来创建各种不同种类的图像和可视化。在本篇文章中&#xff0c;我们将会介绍一些用于Python程序中绘制图形和可视化数据的绘图库。我们将会探讨如何使用这些库来…

windows-中科院学术ChatGPT优化安装记录

搭建中科院学术专业版 ChatGPT记录 1、git仓库获取 > git clone https://github.com/binary-husky/chatgpt_academic.git&#xff08;在git bash 中打开输入就行&#xff09; 打开后输入命令即可 然后你便得到了它&#xff0c;进入该文件夹 打开命令终端&#xff0c;为他配…

融资租赁业务系统(财务中台)

融资租赁业务系统 财务中台 产品白皮书 版本号&#xff1a;V1.1 李雷 微信号&#xff1a;yanan122914 平台概述 融资租赁财务中台产品是一套专门针对融资租赁行业设计的融资租赁财务统一解决方案。对租赁公司传统的大单回租、直租、资产转让等业务模式&#xff0c;渠道零售小…

java 汽车租赁系统

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、汽车租赁系统1.汽车类 抽象父类2.客车类 子类3.轿车类 子类4.业务类5.功能测试类&#xff08;运行&#xff09; 总结 前言 使用数组&#xff0c;面向对象的…

信用租赁系统搭建-“信用”+“租赁”模式,租赁方式更灵活

一、系统介绍 信用租赁系统&#xff08;又名&#xff1a;回租贷款系统&#xff09;是互融云针对租赁市场需求而研发出来的信用租赁金融服务系统&#xff0c;目前主要应用于高信用可免减押金的租赁需求。系统是“信用”“租赁”的模式&#xff0c;租赁方式包含长期租赁方式和短期…