简介面向C#与WPF桌面应用开发者的前端登录UI框架完整源码适合需要快速构建现代风格登录界面、并希望参考WPF动画交互实现的中级开发者。项目自带流畅的登录动画效果界面组件与逻辑代码分离清晰可直接嵌入现有WPF工程复用。资源共33个文件、大小约766KB主要包含8个C#逻辑源码文件、4个XAML界面布局文件与10个PNG图片素材同时提供项目解决方案文件、资源文件、授权说明等目录结构清晰便于二次开发时按模块检索。压缩包以MainWindow与StartMain等窗体呈现完整登录链路附带MessageWindow消息弹窗、MyLoadingLib加载动画库及logo、背景等视觉素材可帮助理解界面样式定制、事件绑定与动画触发逻辑。目前已有1182人学习下载适合教学演示、毕业设计界面改造或商业项目快速原型搭建。1. 一套开箱即用的 C# WPF 登录 UI动画、窗口与源码结构做过 C/S 项目的都知道登录窗口是用户开箱看到的第一张脸。拖两个 TextBox 加一个 Button 三分钟能写完但写出来的东西你自己都不好意思拿给产品看——这也是我把这套 C# 基于 WPF 的前端登录 UI 框架 Win 版源码翻出来拆一遍的原因。它不是那种只有一个登录页的 Demo而是带加载动画库、消息窗、主窗体骨架的完整工程解压编译就能跑。如果你想找一套能直接换皮使用的 WPF 登录界面或者想知道 WPF 里流畅的登录动画到底是怎么组织的这套源码都值得下下来读一遍。整个工程在解决方案里叫「前端系统」资源包里的图片素材也是成套配好的省掉了找图切图的麻烦。2. 先读框架再改代码三个窗口和辅助类各自的职责拿到任何一套 WPF 源码第一件事不是按 F5而是把文件树过一遍搞清楚哪个窗口干哪件事、项目入口在哪、资源是怎么挂上去的。这套框架的文件组织不算复杂但有两个地方容易看走眼一个是启动窗口并不一定是名字看起来最像入口的那个另一个是它把加载动画单独打成了一个库缺了这个引用整个工程根本编译不过。2.1 从 sln 到三个窗口这套框架的文件骨架解压后根目录是wpf-ui-master里面是标准的 Visual Studio 解决方案结构前端系统.sln是解决方案入口前端系统.csproj是工程文件Properties目录下是程序集信息、资源和设置。我一般拿到手先画一张窗口职责表避免改代码时找错文件。文件职责说明MainWindow.xaml登录主窗口承载用户名、密码、登录按钮、背景图StartMain.xaml登录成功后的主窗体登录跳转的目标窗口MessageWindow.xaml消息提示窗登录失败、参数校验时的弹窗反馈App.xaml应用入口配置指定启动窗口和全局资源AKui.cs辅助代码类窗口拖动、圆角裁剪等零散逻辑注意这里有个容易懵的地方MainWindow.xaml和StartMain.xaml都是完整窗口但它们的定位完全不同。MainWindow是登录界面本身StartMain是登录完成之后要跳到的目标页。这种命名习惯在网上的 WPF 框架里很常见主窗口不一定叫 Main登录页也不一定叫 Login先看 App.xaml 里的启动配置比猜名字靠谱。2.2 App.xaml 与启动入口MainWindow 是被谁拉起来的WPF 工程里App.xaml 是启动最早的入口文件它决定了应用一开起来先显示哪个窗口。典型配置是StartupUri指向一个 XAML 窗口源码里大概率就是 MainWindow因为登录界面必须在主窗体之前展示。我习惯把这个逻辑理解成一条链App.xaml 拉起 MainWindowMainWindow 的登录按钮校验通过后拉起 StartMain期间所有错误提示交给 MessageWindow。App.xaml.cs 里通常还做两件事一是订阅DispatcherUnhandledException做全局异常兜底二是初始化一些全局资源比如主色调画刷、默认字体。拆这类框架时我建议先看 App.xaml.cs 里有没有全局异常处理——没有的话登录接口一旦抛异常就是白屏这是后面接真实业务时必踩的坑后面避坑章节会单独讲。2.3 MainWindow 的控件树素材与控件怎么对上登录窗口能不能换皮关键在于素材文件名和 XAML 里的引用是否一一对应。这套框架自带了一套完整的图片素材我对照文件名和常见 WPF 登录页布局整理出下面这张对应关系素材文件对应控件用途login_background.png窗口背景整张登录页的底图logo_login.png/logo.png标题区Logo 展示head_img.png头像区用户头像占位userbox_1.png/userbox_2.png输入框背景常态与聚焦两种状态login_Button_1.png/login_Button_2.png登录按钮背景常态与悬停两种状态exit_1.png/exit_2.png关闭按钮常态与悬停两种状态这种「_1 / _2」成对出现的素材命名是 WPF 换肤里最常见的做法。_1 是默认态_2 是鼠标悬停或聚焦态靠MouseEnter、MouseLeave、GotFocus这类事件去切后台的Background或Source。所以你换素材时不要只换一张成对换否则界面会停留在一种状态下看起来像按钮失灵。2.4 AKui.cs 与 MyLoadingLib辅助代码藏在哪AKui.cs这个文件乍一看不知道是什么但它在源码包根目录里和窗口文件平级我翻过类似项目后基本可以断定它是一个手写的辅助类集合内容大概率包括窗口无边框拖动、圆角剪裁、控件样式扩展这类通用逻辑。这类文件的好处是搬家方便坏处是你改窗口结构时容易把它带丢。换到新工程里记得把这个.cs文件一起带上。MyLoadingLib库【需要进行引用】.zip则是另一个关键角色。Loading 库在 WPF 项目里通常是独立的控件库里面封装了加载动画、转圈效果、遮罩层之类的 UserControl。作者把它单独打成一个压缩包而不是直接放在工程里估计是为了让登录框架保持轻量用的时候再引。这个设计思路对但也是新的编译失败源头——网上很多人下载了源码直接编译报错就是找不到这个库因为压根没解压。提示遇到「命名空间或类型不存在」的编译错误先回来看这个 zip 解压了没有别急着改代码。3. 第一次编译MyLoadingLib 引用与图片资源加载细节把源码变成能跑的程序中间隔着两条沟一是工程依赖的加载动画库二是图片资源的打包方式。这两件事在 WPF 里都写在工程文件里不提前摸清楚编译报错会报得你怀疑人生。这一章我按实际操作的顺序来每一步都给你说明白为什么这样做。3.1 解压后的目录结构先把主压缩包解压你会看到类似下面的结构wpf-ui-master/ ├── 前端系统.sln ├── 前端系统.csproj ├── App.xaml ├── App.xaml.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── StartMain.xaml ├── StartMain.xaml.cs ├── MessageWindow.xaml ├── MessageWindow.xaml.cs ├── AKui.cs ├── MyLoadingLib库【需要进行引用】.zip ├── Img/ │ ├── login_background.png │ ├── logo_login.png │ ├── logo.png │ ├── head_img.png │ ├── userbox_1.png │ ├── userbox_2.png │ ├── login_Button_1.png │ ├── login_Button_2.png │ ├── exit_1.png │ └── exit_2.png └── Properties/ ├── AssemblyInfo.cs ├── Resources.resx └── Settings.settings这个目录里有一个显眼的隐患MyLoadingLib库【需要进行引用】.zip没有被解压也没有被引用。如果你直接双击 sln 然后按 F5工程加载时找不到对应程序集通常会报「未能找到类型或命名空间」一类的错误。先把 zip 解压到任意目录我一般放在工程根目录下命名成MyLoadingLib方便管理。3.2 先把 MyLoadingLib 库解压并引用在 Visual Studio 里右键工程名选择「添加」→「引用」→「浏览」找到刚才解压目录下的 dll 文件勾选确认。这一步做完工程的自定义控件和命名空间才能被识别。如果你是命令行派也可以直接在 csproj 里加一条引用效果一样Reference IncludeMyLoadingLib HintPathMyLoadingLib\bin\Release\MyLoadingLib.dll/HintPath /ReferenceHintPath是给编译器和编辑器指路用的它告诉工程去哪里找这个 dll。注意这个路径是相对 csproj 文件所在的目录来写的所以 DLL 放错层级就会加载失败。我碰到过的情况是作者在压缩包里给了一个 Release 目录用户解压时把 dll 挪到了别处结果HintPath失效明明引用存在却编译不过。还有一个细节值得说MyLoadingLib的命名空间在 XAML 里会以xmlns的形式出现比如xmlns:loadingclr-namespace:MyLoadingLib.Views这种写法标签名对不对得上决定 XAML 设计器能不能正常渲染。如果改过 DLL 的程序集名XAML 里所有引用标签会一起挂。所以拿到这套框架我第一件事是记住这个库的程序集名后面改名换命名的操作都基于这个默认名来做。3.3 从 csproj 看依赖为什么编译不过先看这里csproj 是 WPF 工程的「黑匣子解密文件」。它管三件事引用了哪些程序集、哪些文件作为资源打包、目标框架是什么版本。第 2 章的图片对应也好动画资源也好最终都要落到这里才能被 XAML 引用到。打开前端系统.csproj重点看两个地方Resource IncludeImg\login_background.png / Resource IncludeImg\logo_login.png / Resource IncludeImg\login_Button_1.png / Resource IncludeImg\login_Button_2.png /Resource表示这些图片会作为程序集的嵌入资源参与编译这是 WPF 里最常用的图片处理方式优点是不会在输出目录里生成一堆散文件缺点是你不能随便改图片——改了图片之后必须重新编译整个程序才生效。如果你发现自己改了图片但界面上没变化先检查 Build Action 到底是 Resource 还是 Content这是最容易被忽略的一步。另一种方式是Content配合CopyToOutputDirectory使用图片会以文件形式直接拷到输出目录适合运行时需要动态替换图片的场景。这套源码本身的素材是登录页固定皮肤用 Resource 是合理的。但如果你要做的系统允许用户换皮肤、自定义头像那就要考虑把动态图片改成 Content 模式否则图片就是写死在程序集里的换不了。3.4 选择正确的 .NET TargetFramework 再编译打开 csproj 找到TargetFrameworkVersion节点这套框架带AssemblyInfo.cs和Settings.settings是典型的旧格式工程目标框架多半是 .NET Framework 4.5 或 4.6.x 这个区间。如果你本机装的是高版本 .NET通常向下兼容可以编译但你如果装了纯 .NET Core 环境旧格式工程就打不开了。装 Visual Studio 时勾上「.NET 桌面开发」工作负载里面自带 .NET Framework 4.x 开发包这个问题就不会遇到。编译时还有个小坑项目的 Debug 和 Release 输出路径如果改了约定好的输出目录MyLoadingLib 的 dll 没有一起拷贝过去运行时会报「找不到程序集」。我习惯把输出路径保持默认或者把第三方 dll 复制到输出目录里两条路都能避免这个坑。编译完直接 CtrlF5 启动能看到登录窗口带背景图和加载动画正常起来这一步就算过了。提示这套框架的核心是 UI 表现层运行后不会弹出控制台调试信息要自己加断点或拼到消息窗里看。4. 流畅动画的实现套路两态图片、Storyboard 与触发逻辑登录 UI 的「质感」很大程度来自动画。按钮按下后的颜色过渡、鼠标划过输入框的边框变化、窗口弹出的淡入效果这些用 WPF 做起来比 WinForms 顺手得多因为 XAML 里原生支持 Storyboard不用像 GDI 那样手写计时器刷帧。这套源码主打流畅动画核心实现方式不外乎三种两态素材切换、Storyboard 补间动画、以及事件触发的动画队列。下面拆开讲。4.1 两态素材切换悬停和聚焦靠事件驱动login_Button_1.png和login_Button_2.png的存在说明登录按钮用了两态图片切换的方式做交互反馈。WPF 里最常见的实现是给 Button 包一层 Style用 ControlTemplate 把图片作为背景再通过触发器切状态。不过这套源码的风格更接近直接写代码事件在 MainWindow.xaml.cs 里挂MouseEnter和MouseLeave切换背景private void LoginButton_MouseEnter(object sender, MouseEventArgs e) { // 悬停时切换成高亮图片 LoginButton.Background new ImageBrush( new BitmapImage(new Uri(pack://application:,,,/Img/login_Button_2.png))); } private void LoginButton_MouseLeave(object sender, MouseEventArgs e) { // 移开后切换回默认图片 LoginButton.Background new ImageBrush( new BitmapImage(new Uri(pack://application:,,,/Img/login_Button_1.png))); }这里用了pack://application:,,,这个 URI 写法它是 WPF 读取嵌在程序集里的 Resource 图片的标准协议。路径开头的三个逗号不能少少了就找不到图。ImageBrush的作用是把图片平铺填充到控件的背景区域比直接设置Background属性更灵活因为它支持拉伸模式、对齐方式等参数。如果你只想让图片居中不拉伸可以设StretchUniform防止小图被拉变形。4.2 Storyboard动画资源写在哪个位置两态切换只是最基础的反馈真正的流畅感来自 Storyboard。拆这类框架时我一般把动画资源分两类一类是全局动画放在 App.xaml 的Window.Resources里做共享另一类是局部动画写在具体窗口的 Resources 里。典型的一段淡入淡出动画长这样Storyboard x:KeyFadeIn DoubleAnimation Storyboard.TargetPropertyOpacity From0 To1 Duration0:0:0.4 / /StoryboardFrom表示动画起始值To是结束值Duration是动画时长单位是「时:分:秒」0:0:0.4就是 400 毫秒。Opacity 从 0 到 1 就是淡入反过来就是淡出。0.4 秒这个时长是经过验证的——太短小于 0.2 秒用户感知不到过渡太长大于 0.6 秒会觉得拖沓。登录窗口打开时挂一个淡入动画弹窗出现时挂一个透明度过渡整体感觉就会比硬切舒服很多。如果你看到源码里写了EasingFunction比如CubicEase或QuadraticEase那就说明作者没有用线性动画。线性动画的缺点是起始和结尾都「急」像机械运动缓动函数则让动画有了加速减速的节奏。CubicEase默认是缓入缓出视觉效果上是先慢后快再慢接近物理运动观感最自然。这套框架的流畅感一半功劳在这里。4.3 代码侧触发动画与业务联动XAML 里定义动画只完成了一半另一半是「什么时候触发」。框架里常见的触发姿势有四种窗口加载时、按钮点击时、校验失败时、切换登录方式时。在代码里启动一个 Storyboard标准写法是拿到资源里定义好的动画再调用Begin()private void Window_Loaded(object sender, RoutedEventArgs e) { // 从当前窗口资源里找名为 FadeIn 的动画 Storyboard fadeIn (Storyboard)this.Resources[FadeIn]; fadeIn.Begin((FrameworkElement)sender); }这里有个坑需要提醒Begin()方法的参数是动画的宿主对象它决定了动画的时钟作用在哪个元素树上。传错了对象动画会有各种奇怪表现。我见过新手把宿主传成this动画效果只在窗口级生效子控件的透明度完全不变化。稳妥的做法是直接传触发动画的那个控件。代码侧触发动画的场景最典型的是「登录中」状态点击登录按钮后先播放一个加载动画这个时候 MyLoadingLib 派上用场把按钮文字换成菊花转圈接口返回后再停掉动画。这套框架里 MyLoadingLib 就是干这个的它的加载动画覆盖在登录按钮上通过 Visibility 控制显隐代码结构上会更加清晰。4.4 参数怎么调时长、缓动与窗口尺寸配合动画不是越炫越好登录场景里有个原则所有动画总时长不要超过 800 毫秒。用户不是来看动画的他是来登录的。我给这套框架调参时的经验值如下参数建议值调整依据窗口淡入300–400 ms过短没效果过长打断操作节奏按钮悬停过渡100–150 ms反馈要快慢了像卡顿登录按钮点击200–300 ms要有按下感但不拖泥带水消息窗弹出300 ms CubicEase带一点缓动不生硬加载动画遮罩登录接口返回后立即消失遮罩停留越短越好窗口尺寸方面登录背景图如果是 1920×1080 的素材在小分辨率屏幕上会被压缩观感变差。常见做法是给窗口设置固定尺寸或者用Viewbox包裹背景层做等比缩放。作者给的是背景图素材大概率是固定尺寸设计你换到自己项目里时注意分辨率适配否则在 1366×768 的笔记本上打开会被截掉一大块。5. 避坑指南五个让新手翻车的 WPF 项目问题这套框架下载量不小但评论区里问得最多的其实不是「动画怎么写」而是「为什么我打开编译不过」「为什么图片不显示」「为什么运行后白屏」。这些问题的根源绝大多数不是源码有问题而是使用姿势不对加上对 WPF 工程的机制不熟悉。下面按我自己的踩坑经验写五条。5.1 MyLoadingLib 引用失败编译直接报错现象打开解决方案按 F5编译输出一堆「找不到类型或命名空间」的错误错误列表定位到 XAML 文件。原因MyLoadingLib库【需要进行引用】.zip根本没有解压更别提引用了。VS 的解决方案面板里陈旧的引用关系还指向一个不存在的 DLL编译时自然找不到程序集。解决先把 zip 解压到工程根目录然后在「引用」里添加浏览选中解压出来的 dll。如果 dll 是 .NET Framework 4.0 编译的注意你的工程目标框架版本要大于等于 4.0否则会有更高的框架版本兼容报错。5.2 图片全空白背景黑成一片现象编译运行后登录界面内容都在但背景图和按钮图全不显示整个窗口像坏了一样。原因图片没有被打包进程序集或者 XAML 里引用的路径和实际路径不符。我用pack://application:,,,/Img/login_background.png这种绝对路径时最常犯的错是少了开头的pack://application:,,,前缀或者.png大小写写错导致资源定位失败。解决右键检查 Img 目录下的图片确认「生成操作」是 Resource。XAML 里引用路径统一用小写和文件名保持完全一致。设计器里能看到图但运行时看不到重点查这个设计器里也看不到就查图片有没有被排除出项目。5.3 启动白屏窗口一个像素都不渲染现象程序能启动进程在任务管理器里能看到但窗口一直是纯白或纯透明什么控件都不渲染。这一类问题最玄学因为它不报错没有异常黑匣子一样。原因多数情况是某个资源字典或静态资源解析失败WPF 在加载 XAML 时碰到无法解析的资源整体放弃了渲染。另一个常见原因是 App.xaml 里指定的StartupUri窗口在构造函数或 Loaded 事件里抛了异常而工程里没有做全局异常捕获异常被吞掉界面就空白了。解决看到这种症状第一步看 App.xaml.cs 里有没有DispatcherUnhandledException的捕获逻辑没有就先加一个把异常信息写进日志或弹出来。第二步逐个注释 MainWindow.xaml 里可疑的资源引用缩小范围。从那以后我养成一个习惯每套新框架接手先跑一次带全局异常捕获的模板再往里加自己的代码不然排查白屏全靠猜。5.4 按钮悬停状态不生效现象鼠标划过登录按钮背景图和图标没有任何变化看起来像控件死了。原因按钮的Background被代码或样式占用了两态切换的逻辑条件冲突。比如我在 4.1 节里写的 MouseEnter 切换方法里用了new ImageBrush这会覆盖原有的Background如果原样式里还设置了BorderBrush或模板新刷上去的背景就会被模板盖住看不见变化。解决检查按钮是否用了自定义 ControlTemplate模板内部画的背景优先级高于 Background 属性。如果是这种情况应该在模板里放一个名为bg的 Border然后切换bg.Background而不是整个 Button 的背景。另外注意 MouseEnter 和 MouseLeave 事件必须成对存在只写进入不写离开状态就会卡在悬停态。5.5 动画卡顿转圈不流畅现象加载动画转起来一顿一顿的弹窗淡入也不顺滑CPU 占用却不高帧率上不去。原因可能是图片素材太大比如背景图直接用了 2M 的原始 PNG每次渲染都要解压另一种是动画属性选择不当动画了Opacity但对控件整体生效导致每一帧都要触发整个子树的重算布局。WPF 的动画引擎对渲染线程有优化但对布局属性如Width、Height、Margin的动画是性能杀手动画时必须避开这些。解决把背景图统一压缩到 1920 宽以内单张控制在 500K 以下动画属性优先选Opacity和RenderTransform这两个是渲染层属性不会触发布局重算。加载动画转圈的场景直接在RenderTransform里的RotateTransform上做 Angle 从 0 到 360 的循环动画CPU 占用能降一大截。6. 进阶把登录框接上真实登录接口再顺手验证动画框架跑通之后聪明的做法是先把登录逻辑换掉再把动画参数验证一遍最后才谈改样式。先说换逻辑源码里的登录按钮点击事件大概率只做了本地校验——用户名不为空、密码不为空然后直接跳转。这在 Demo 阶段可以接受接真实业务时必须改成异步调用。private async void LoginButton_Click(object sender, RoutedEventArgs e) { // 1. 本地非空校验不合法直接提示不进接口 if (string.IsNullOrWhiteSpace(UsernameBox.Text) || string.IsNullOrWhiteSpace(PasswordBox.Password)) { MessageWindow.Show(请输入用户名和密码); return; } // 2. 调接口前先亮出加载动画 LoadingOverlay.Visibility Visibility.Visible; try { using (var client new HttpClient()) { var form new FormUrlEncodedContent(new[] { new KeyValuePairstring, string(username, UsernameBox.Text), new KeyValuePairstring, string(password, PasswordBox.Password) }); var resp await client.PostAsync(http://localhost:8080/api/login, form); if (resp.IsSuccessStatusCode) { new StartMain().Show(); Close(); } else { MessageWindow.Show(用户名或密码错误); } } } catch (Exception ex) { // 3. 全局异常兜底避免白屏 MessageWindow.Show(网络异常 ex.Message); } finally { LoadingOverlay.Visibility Visibility.Collapsed; } }这段代码把原来的「本地假校验」替换成了HttpClient的异步 POST 请求。await关键字保证 UI 线程在等待网络响应时不卡死FormUrlEncodedContent是最简单的表单提交方式你的后端如果是 Spring Boot、ASP.NET Core 或 Gin 这类框架都能直接接收LoadingOverlay是 MyLoadingLib 里的加载遮罩在请求期间显示请求结束无论成功失败都在finally里隐藏这样不会导致遮罩卡在屏幕上。接口地址、超时时间、错误码映射按你自己的后端改就行。验证动画参数时我习惯用两个工具一个是 XAML 设计器里直接编辑Duration和EasingFunction实时看效果另一个是运行后打开 SnoopWPF 可视化树检查工具查看动画运行时的依赖属性值是否真的在变化。Snoop 能看到某个动画当前是否处于 Active 状态、目标属性是否被多重绑定覆盖排查「动画写了但没生效」这类问题非常效率。动画是这套框架的卖点建议花一下午把每个窗口的动画时长过一遍改成自己舒服的手感再往上叠加业务代码。从那以后我每次拿到新框架都强制走一遍「完整编译→替换登录逻辑→验证动画」这条流程先确认地基是实的再往上盖楼希望这篇拆解帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
表格化解析UTF-8解码:一图读懂tabulate4cj的decodeRuneInString状态机源码 表格化解析UTF-8解码:一图读懂tabulate4cj的decodeRuneInString状态机源码 【免费下载链接】tabulate4cj tabulate4cj - 使用 仓颉 轻松美化 表格数据。 项目地址: https://gitcode.com/Cangjie-SIG/tabulate4cj
📌 tabulate4cj 是一个用仓颉语言… · 2026/9/24 23:40:14
PCA9546A四路I2C多路复用开关:地址隔离与总线分段实战 1. 从一条I2C总线到四路分支:PCA9546A到底解决了什么麻烦做过嵌入式的人大概都遇到过这种局面:主控只有一组I2C接口,但板子上挂着好几路功能模块,每一路都想独立控制,偏偏这些模块的I2C地址还撞车了。比如两块同型号的… · 2026/9/24 23:40:08
如何为 AtomCode 接入 MCP 服务器:外部工具扩展完整教程 如何为 AtomCode 接入 MCP 服务器:外部工具扩展完整教程 【免费下载链接】atomcode Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | A… · 2026/9/24 23:40:08
lavish-axi接入Claude Code等Agent的4种方式:skill、hook与plugin完整指南 lavish-axi接入Claude Code等Agent的4种方式:skill、hook与plugin完整指南 【免费下载链接】lavish-axi HTML is the new markdown. Lavish is the new editor for your HTML artifacts. 项目地址: https://gitcode.com/gh_mirrors/la/lavish-axi
lavish-axi… · 2026/9/25 1:28:25
mp3-module TF卡音乐命名指南:0001.wav文件格式与按名播放的差异一次讲清 mp3-module TF卡音乐命名指南:0001.wav文件格式与按名播放的差异一次讲清 【免费下载链接】CupCode_mp3模块 源师兄扩展项目: MP3模块 | 由源师兄组织创建 项目地址: https://gitcode.com/yuanshixiong/mp3-module
源师兄的 CupCode_mp3 模块是面向源师兄板的… · 2026/9/25 1:28:25
智能物流小车硬件选型避坑指南:从电机编码器到主控的实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:28:19
Obsidian离线插件安装全攻略:从下载到备份一篇搞懂 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:28:19
ps2-controller源码解读:PS2I2C类如何把6字节I2C数据变成16个按键和4根摇杆 ps2-controller源码解读:PS2I2C类如何把6字节I2C数据变成16个按键和4根摇杆 【免费下载链接】ps2-controller 源师兄扩展项目: PS2 | 由源师兄组织创建 项目地址: https://gitcode.com/yuanshixiong/ps2-controller
ps2-controller 是源师兄开源的 PS2 手柄扩… · 2026/9/25 1:28:19
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37