WPFDevelopers 实战:主题切换、颜色选择与圆形菜单一站式集成
目录一、ColorSwitchBtn —— 主题色切换按钮1.1 效果1.2 XAML 结构1.3 C# 后台代码1.4 三步接入你自己的项目二、CircleMenu —— 圆形弹出菜单2.1 效果2.2 XAML 结构2.3 常用依赖属性一览2.4 路由事件2.5 后台处理命令示例2.6 拖动 点击判定2.7 动画实现原理三、组合使用建议四、完整最小示例一、ColorSwitchBtn —— 主题色切换按钮1.1 效果点击标题栏上的调色板图标按钮弹出一个Popup内含ColorPicker颜色选择器用户挑选好颜色后点Apply即可实时切换整个应用的主题色点Cancel则关闭弹层不应用。1.2 XAML 结构wd:Window.TitleBarLayout StackPanel HorizontalAlignmentRight wd:PanelHelper.Spacing2 OrientationHorizontal wd:SwitchButton x:NameThemeSwitchBtn Width30 Height30 ClickThemeSwitchBtn_Click wd:SwitchButton.UncheckedContent /wd:SwitchButton.UncheckedContent wd:SwitchButton.CheckedContent /wd:SwitchButton.CheckedContent /wd:SwitchButton wd:SwitchButton x:NameColorSwitchBtn Width30 Height30 wd:SwitchButton.UncheckedContent wd:PathIcon Data... ForegroundWhite / /wd:SwitchButton.UncheckedContent wd:SwitchButton.CheckedContent wd:PathIcon Data... ForegroundWhite / /wd:SwitchButton.CheckedContent /wd:SwitchButton Popup AllowsTransparencyTrue HorizontalOffset-200 IsOpen{Binding IsChecked, ElementNameColorSwitchBtn, ModeTwoWay} PlacementBottom PlacementTarget{Binding ElementNameColorSwitchBtn} StaysOpenFalse Border Margin10 Background{DynamicResource WD.BackgroundBrush} BorderBrush{DynamicResource WD.BaseBrush} BorderThickness1 CornerRadius4 Effect{StaticResource WD.PopupShadowDepth} StackPanel Margin4 wd:ColorPicker x:NameThemeColorPicker / StackPanel HorizontalAlignmentRight wd:PanelHelper.Spacing4 OrientationHorizontal Button ContentApply Style{StaticResource WD.PrimaryButton} ClickColorPicker_Apply / Button ContentCancel Style{StaticResource WD.DefaultButton} ClickColorPicker_Cancel / /StackPanel /StackPanel /Border /Popup /StackPanel /wd:Window.TitleBarLayout关键点wd:SwitchButton自带Checked/Unchecked两态内容可直接当作开关图标。Popup.IsOpen双向绑定到ColorSwitchBtn.IsChecked点击按钮自动弹出点外部自动收起。ColorPicker控件来自 WPFDevelopers开箱即用。1.3 C# 后台代码private void OnMainWindow_Loaded(object sender, RoutedEventArgs e) { SetThemeSource(); // 用当前主题色初始化颜色选择器 ThemeColorPicker.SelectedColor ThemeManager.Instance.PrimaryColor; } private void ColorPicker_Apply(object sender, RoutedEventArgs e) { ColorSwitchBtn.IsChecked false; // 关闭 Popup ThemeManager.Instance.SetColor(ThemeColorPicker.SelectedColor); } private void ColorPicker_Cancel(object sender, RoutedEventArgs e) { ColorSwitchBtn.IsChecked false; // 仅关闭 Popup }1.4 三步接入你自己的项目在窗口顶部或任意容器放置wd:SwitchButtonwd:ColorPickerPopup。Popup.IsOpen双向绑定到按钮IsChecked。在 Apply 按钮事件中调用ThemeManager.Instance.SetColor(picker.SelectedColor)。二、CircleMenu —— 圆形弹出菜单2.1 效果悬浮在窗口右下角的圆形按钮点击中心按钮后子菜单项沿圆形轨迹向外展开带 0.4s 动画点击某一项触发命令再次点击中心按钮则收回。整个圆形菜单还可拖动。2.2 XAML 结构wd:CircleMenu Grid.Column2 Width100 Height100 Margin20 HorizontalAlignmentRight VerticalAlignmentBottom ItemClickCommand{Binding CircleMenuItemClickCommand, RelativeSource{RelativeSource AncestorTypeWindow}} wd:CircleMenuItem x:NameScreenShot ToolTipScreenShot wd:SvgViewer Sourcepack://application:,,,/WPFDevelopers.Samples;component/Resources/Svg/ScreenShot.svg / /wd:CircleMenuItem wd:CircleMenuItem x:NameGithub ToolTipGithub wd:SvgViewer Sourcepack://application:,,,/WPFDevelopers.Samples;component/Resources/Svg/Github.svg / /wd:CircleMenuItem wd:CircleMenuItem x:NameGrayscale ToolTipGrayscale wd:SvgViewer x:NameGrayscaleSvg Sourcepack://application:,,,/WPFDevelopers.Samples;component/Resources/Svg/EnableGrayscale.svg / /wd:CircleMenuItem wd:CircleMenuItem x:NameTheme ToolTipTheme wd:SvgViewer x:NameThemeSvg Sourcepack://application:,,,/WPFDevelopers.Samples;component/Resources/Svg/Sun.svg / /wd:CircleMenuItem wd:CircleMenuItem x:NameCode ToolTipMainWindow Code wd:SvgViewer Sourcepack://application:,,,/WPFDevelopers.Samples;component/Resources/Svg/Code.svg / /wd:CircleMenuItem wd:CircleMenuItem x:NameClearToast ToolTipClear Toast wd:PathIcon Width10 Height10 KindWindowClose / /wd:CircleMenuItem /wd:CircleMenu2.3 常用依赖属性一览属性类型说明ItemsCircleMenuItemCollection子项集合也可直接在 XAML 中写子元素IsExpandedbool控制展开/收起支持 TwoWay 绑定ItemClickCommandICommand子项点击命令参数为被点击的CircleMenuItemSelectedIndex/SelectedItemint/object选中项默认双向绑定SectorBackgroundBrush扇区背景色SectorDualBackgroundBrush奇数项扇区交替色SelectedBackgroundBrush选中扇区背景色MinItemsint子项最小数量低于此值自动隐藏默认 2CanDragbool是否允许拖动整个菜单默认 true2.4 路由事件wd:CircleMenu ItemClickCircleMenu_ItemClick ... /private void CircleMenu_ItemClick(object sender, RoutedEventArgs e) { var item e.OriginalSource as CircleMenuItem; // 处理点击... }ItemClick和ItemClickCommand会同时触发MVVM 推荐用 Command复杂交互可用事件。2.5 后台处理命令示例public ICommand CircleMenuItemClickCommand new RelayCommand(param { if (param isnot CircleMenuItem item) return; switch (item.Name) { caseScreenShot: // 截图... break; caseGithub: Process.Start(new ProcessStartInfo(https://github.com/...) { UseShellExecute true }); break; caseTheme: var isDark ThemeSvg.Source.Contains(Moon); App.Theme isDark ? ThemeType.Dark : ThemeType.Light; ThemeManager.Instance.SetTheme(App.Theme); break; caseCode: CodeDrawer.IsOpen !CodeDrawer.IsOpen; break; caseClearToast: Toast.ClearAll(); break; } });2.6 拖动 点击判定CanDragTrue默认时拖动菜单会在父容器范围内移动光标变为 SizeAll。当按下到抬起的水平/垂直位移都小于 3 像素时判定为点击触发IsExpanded翻转。2.7 动画实现原理展开/收起基于ItemsPresenter.Clip的EllipseGeometry.RadiusX/RadiusY配合CubicEase(EaseOut)展开 0.4s、收起 0.3s。子项角度在UpdateAllAnglesCore()中按360 / Items.Count均分计算。三、组合使用建议位置CircleMenu一般放在窗口角落如示例的右下角ColorSwitchBtn适合放在TitleBarLayout。主题联动CircleMenu 中的Theme项可与ThemeSwitchBtn共享同一套ThemeManager逻辑保证 UI 一致。MVVM所有交互尽量通过ItemClickCommandRelayCommand处理后台只保留视图层必要的绑定如IsChecked、Source切换。子项数量建议 3–8 个超过 8 个扇区会过于拥挤。MinItems默认为 2可根据业务调整。资源示例使用wd:SvgViewer加载 SVG 图标也支持wd:PathIcon等任意UIElement作为子项内容。四、完整最小示例wd:Window xmlns:wdhttps://github.com/WPFDevelopersOrg/WPFDevelopers ... wd:Window.TitleBarLayout StackPanel HorizontalAlignmentRight OrientationHorizontal wd:SwitchButton x:NameColorSwitchBtn Width30 Height30 wd:SwitchButton.UncheckedContent wd:PathIcon Data... ForegroundWhite / /wd:SwitchButton.UncheckedContent wd:SwitchButton.CheckedContent wd:PathIcon Data... ForegroundWhite / /wd:SwitchButton.CheckedContent /wd:SwitchButton Popup IsOpen{Binding IsChecked, ElementNameColorSwitchBtn, ModeTwoWay} PlacementBottom PlacementTarget{Binding ElementNameColorSwitchBtn} StaysOpenFalse StackPanel wd:ColorPicker x:NameThemeColorPicker / Button ContentApply ClickColorPicker_Apply / /StackPanel /Popup /StackPanel /wd:Window.TitleBarLayout Grid wd:CircleMenu Width100 Height100 HorizontalAlignmentRight VerticalAlignmentBottom ItemClickCommand{Binding MenuClickCmd} wd:CircleMenuItem ToolTipItem 1 wd:PathIcon KindHome / /wd:CircleMenuItem wd:CircleMenuItem ToolTipItem 2 wd:PathIcon KindSettings / /wd:CircleMenuItem /wd:CircleMenu /Grid /wd:Windowprivate void ColorPicker_Apply(object sender, RoutedEventArgs e) { ColorSwitchBtn.IsChecked false; ThemeManager.Instance.SetColor(ThemeColorPicker.SelectedColor); }引入地址

相关新闻

人教版七年级英语教学资源数字化处理与平台集成技术指南

人教版七年级英语教学资源数字化处理与平台集成技术指南

对于初中英语教学资源的技术性整理和数字化应用,教育工作者和技术支持团队需要一套清晰的方法来管理、验证和优化这些材料。虽然输入材料主要围绕人教版七年级英语上册的视频和PDF资源,但实际项目中更关键的是如何确保这些资源的完整性、可访问性以及在教…

2026/8/21 1:15:19 阅读更多 →
上虞实体门店数字化找谁?探访数享智创完整业务

上虞实体门店数字化找谁?探访数享智创完整业务

当下上虞各大商圈、乡镇实体门店普遍遭遇数字化经营难题:多平台门店信息杂乱,AI 检索难以抓取品牌信息;短视频、直播、宣传物料制作消耗大量人力;线上多渠道流量割裂,缺少稳定私域承接载体。不少本地经营者都在寻找适配…

2026/8/19 1:53:48 阅读更多 →
科研自动化工具解析:EvoScientist与Auto-claude应用实践

科研自动化工具解析:EvoScientist与Auto-claude应用实践

1. 自动化科研项目概述最近两年,科研自动化工具正在经历爆发式增长。作为一名长期关注科研工具发展的从业者,我观察到2023年至今涌现的自动化科研项目数量已经超过了过去五年的总和。这些工具正在从根本上改变科研工作者的日常研究模式——从文献检索、实…

2026/8/20 22:04:07 阅读更多 →

最新新闻

Nginx核心知识点与面试高频问题解析

Nginx核心知识点与面试高频问题解析

1. Nginx面试核心知识点解析作为Web服务领域的瑞士军刀,Nginx在技术面试中的考察频率居高不下。根据我对数百场技术面试的观察统计,Nginx相关问题主要集中在配置优化、架构原理和故障排查三个维度。以下是面试官最常深挖的12个技术要点:1.1 基…

2026/8/22 6:18:26 阅读更多 →
铁路站台安全标线建模:从人体运动学到动态视觉引导

铁路站台安全标线建模:从人体运动学到动态视觉引导

1. 项目概述:一道真实赛题背后的工程思维落地2023年辽宁省大学数学建模竞赛A题——“铁路车站的安全标线”,表面看是个交通管理场景下的几何与优化问题,实则是一次对建模者“工程直觉数学表达现实约束”三重能力的综合检验。我带过七届校队&a…

2026/8/22 6:18:26 阅读更多 →
AI智能体如何通过合理推理避免博弈论陷阱:从纳什均衡到合作均衡

AI智能体如何通过合理推理避免博弈论陷阱:从纳什均衡到合作均衡

1. 项目概述:当AI智能体学会“讲道理”最近在AI智能体(AI agents)的研究圈里,一个挺有意思的话题被反复讨论:如果我们让智能体在互动中具备“合理推理”(Reasonably reasoning)的能力&#xff0…

2026/8/22 6:18:26 阅读更多 →
智能体AI集成异常检测:构建主动风险管理的感知决策闭环

智能体AI集成异常检测:构建主动风险管理的感知决策闭环

1. 项目概述:当智能体学会“预警”最近在跟几个做智能决策系统的朋友聊天,大家普遍遇到一个头疼的问题:系统运行得挺好,能处理任务,也能学习优化,但总感觉“缺根弦”。缺哪根弦呢?缺的是那种“未…

2026/8/22 6:18:26 阅读更多 →
WarcraftHelper:三步部署,修复魔兽争霸3宽屏、帧率锁定与8MB地图限制

WarcraftHelper:三步部署,修复魔兽争霸3宽屏、帧率锁定与8MB地图限制

WarcraftHelper:三步部署,修复魔兽争霸3宽屏、帧率锁定与8MB地图限制 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 在 1.27b…

2026/8/22 6:18:26 阅读更多 →
2023 Java面试核心知识点与实战指南

2023 Java面试核心知识点与实战指南

1. Java面试核心知识点梳理2023年Java技术栈的面试难度明显提升,各大厂对候选人的要求从单纯的八股文背诵转向了深度原理理解和实战能力考察。根据我最近三个月参与的技术面试和行业交流,整理出这份覆盖90%高频考点的备战指南。Java面试的核心考察点主要…

2026/8/22 6:17:26 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 0:02:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/20 21:46:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →