712:Atta. cursor;ToggleButton

📅 2026/7/13 2:25:07
712:Atta. cursor;ToggleButton
1Buttonatta:AttacherContainer.KindWindowCloseCursorHandStyle{StaticResource menuIconButton}/整体功能这是程序窗口关闭按钮点击执行ViewModel里的ShutDownCommand实现软件退出挂载第三方附加属性做窗口关闭专用样式区分鼠标悬浮显示手型复用全局图标按钮模板。2.atta:AttacherContainer.KindWindowCloseatta项目中引入的附加属性命名空间自制工具类 / HandyControl 配套Attacher工具AttacherContainer附加属性静态类KindWiClose标记该按钮用途为「窗口关闭」作用在全局menuIconButton样式/Behavior中识别类型自动加载关闭图标、 hover红色高亮、专属缩放动画不用单独写一套样式。底层原理附加属性AttachedProperty给Button扩展额外业务标记纯XAML无后台代码实现差异化UI。4.CursorHand鼠标移入按钮时光标变为手型提示可点击交互提升界面操作辨识度。5.Style{StaticResource menuIconButton}复用全局静态资源样式menuIconButton内置ControlTemplateContentPresenter承载关闭图标自带IsMouseOver悬浮放大动画0.1s移入放大1.05倍、0.15s回弹统一标题栏最小化/最大化/关闭按钮尺寸、圆角、缩放交互界面风格统一。完整配套关联链路样式menuIconButton内部通过atta:AttacherContainer.Kind判断按钮类型WindowClose加载×关闭图标hover背景变红配套你之前的ViewboxPolygon三角箭头逻辑同类图标统一管理点击触发ShutDownCommand完全符合MVVM分层界面与设备退出业务解耦标题栏同系列按钮最小化、还原仅修改Kind和Command复用同一套Style减少重复XAML代码。典型ViewModel命令示例// 主窗口ViewModelpublicICommandShutDownCommand{get;}publicMainViewModel(){ShutDownCommandnewRelayCommand(ExecuteShutdown);}privatevoidExecuteShutdown(){// 1. 弹窗确认是否退出varconfirmMessageBox.Show(确定要关闭,退出提示,MessageBoxButton.YesNo);if(confirm!MessageBoxResult.Yes)return;// 2. 停止服务、释放硬件资源_deviceService.StopScan();// 3. 保存MachineConfig设备配置_configService.SaveMachineConfig();// 4. 关闭应用程序Application.Current.Shutdown();}踩坑注意点atta命名空间缺失页面顶部缺少xmlns:attaclr-namespace:项目命名空间.UtilsXAML直接报错ShutDownCommand无响应ViewModel未实现INotifyPropertyChanged、DataContext未正确绑定到窗口附加属性不生效menuIconButton样式内未读取AttacherContainer.Kind做图标切换按钮无图标模板内ContentPresenter依赖Kind加载对应矢量图形标记写错会空白。2Button.ContentStackPanelm:MaterialIconKindGroupm:MaterialIcon.EffectDropShadowEffectBlurRadius1ShadowDepth1Color#333333//m:MaterialIcon.Effect/m:MaterialIcon整体作用按钮内部内容使用垂直StackPanel承载大尺寸Group分组矢量图标图标带白色半透填充灰色投影阴影分层拆解1.Button.Content专门用来定义按钮内部自定义复合内容如果不写这个标签按钮只能填简单文字内部需要图标文字组合时必须用Button.Content包裹布局容器StackPanel/Grid。2. 外层StackPanel布局容器默认垂直排列OrientationVertical当前只放了一个图标后续可以追加TextBlock写按钮文字实现「图标在上、文字在下」的标准功能按钮布局StackPanelm:MaterialIcon.../TextBlockText批量分组检测ForegroundWhiteHorizontalAlignmentCenter//StackPanel3.m:MaterialIcon核心图标控件这是Material.Icons.Wpf第三方图标库控件你项目上位机统一用的矢量图标组件m:MaterialIconForeground#e6ffffffKindGroupWidth70 Height70图标固定70×70大尺寸首页功能大按钮规格Foreground#e6ffffff填充颜色e6是透明度后面ffffff白色 →半透白色图标KindGroup指定图标类型显示「分组/群组」矢量图形用于批量BGA、多板分组检测功能入口。4. 图标阴影特效DropShadowEffectm:MaterialIcon.EffectDropShadowEffectBlurRadius1ShadowDepth1Color#333333//m:MaterialIcon.Effect给图标增加细微灰色投影提升悬浮立体感BlurRadius1阴影模糊程度1不夸张工业界面简洁风格ShadowDepth1阴影偏移距离1像素Color#333333深灰色阴影不会抢白色图标的视觉重点。完整可扩展成品图标文字标准按钮ButtonMargin10Command{Binding GroupScanCommand}Style{StaticResource menuIconButton}Button.ContentStackPanelm:MaterialIconWidth70Height70Foreground#e6ffffffKindGroupm:MaterialIcon.EffectDropShadowEffectBlurRadius1ShadowDepth1Color#333333//m:MaterialIcon.Effect/m:MaterialIconTextBlockText分组批量扫描ForegroundWhiteFontSize14Margin0,8,0,0HorizontalAlignmentCenter//StackPanel/Button.Content/Button结合你之前知识点联动说明按钮套用menuIconButton样式自带ControlTemplate、ScaleTransform悬浮放大动画模板内部ContentPresenter会自动渲染这里的StackPanel图标内容鼠标移入时整套图标文字同步缩放交互统一常见踩坑点图标空白/不显示缺少NuGet包Material.Icons.Wpf、页面未引入命名空间xmlns:mclr-namespace:Material.Icons.Wpf;assemblyMaterial.Icons.Wpf透明色异常Foreground十六进制格式为AARRGGBB透明度在前写反会变成纯黑/纯白阴影卡顿页面大量图标同时加DropShadowEffect会增加GPU消耗首页少量大按钮使用无压力表格小图标建议移除特效图标拉伸变形必须同时设置WidthHeight相等保证矢量图标等比例不变形。3ToggleButtonVisibility{Binding ElementNameModeButton, PathIsMouseOver, Converter{StaticResource Boolean2VisiblityConverter}}绑定三要素拆解ElementNameModeButton指定绑定目标是外层命名为ModeButton的ToggleButtonPathIsMouseOver读取按钮自带属性鼠标是否悬浮在按钮范围内true/falseBoolean2VisiblityConverter 布尔转可见性转换器转换逻辑标准实现输入 true鼠标悬浮按钮→ 返回 Visibility.Visible → 画布显示弹出菜单输入 false鼠标离开按钮→ 返回 Visibility.Collapsed → 画布完全隐藏不占用布局空间。