Delphi 11 Firemonkey自定义Checkbox样式勾选标记不显示问题求助
问题成因
- 动画触发源绑定错误:你将
TColorAnimation放在TPath控件下,TPath自身没有IsChecked属性,该属性属于应用样式的宿主TCheckBox组件,动画找不到触发条件因此始终不会执行,导致勾选标记透明度不会随状态切换 - 触发规则不规范:未指定触发源的情况下,FireMonkey只会在当前控件的属性里查找触发字段,自然无法响应复选框的勾选状态变化
- 消失动画时长异常:0.000099秒的动画时长过短,可能被系统判定为无效动画直接跳过执行
修复方案
修改样式中两个TColorAnimation的配置,新增Source=Component指定触发源为应用样式的宿主复选框,同时调整过短的消失动画时长避免偶发渲染异常,修改后的TPath节点代码如下:
object TPath StyleName = 'checkmark' Align = Client Data.Path = { 2A0000000000000000E0D8440000FF440100000000E0B5440000DC4401000000 008093440060FE440200000000A0804400A00845020000000000614400601045 0200000000C05F44006010450200000000405E44006010450200000000804C44 00400C45020000000040384400200745010000000080134400E0FB4401000000 004058440080D9440200000000007E4400A0C6440200000000808E4400A0B644 0200000000808E4400E0B5440200000000808E440040B5440200000000C07D44 0000A5440200000000C0574400009244010000000080124400C05E4401000000 00803844008038440100000000405E44004012440100000000E0914400C05744 020000000000A54400C07D44020000000040B54400808E440200000000E0B544 00808E440200000000A0B64400808E440200000000A0C64400007E4402000000 0080D944004058440100000000E0FB4400801344010000000020074500403844 0200000000400C4500804C44020000000060104500405E440200000000601045 00805F44020000000060104500C060440200000000A008450060804402000000 0060FE44004093440100000000E0DB4400C0B544010000000000FF4400E0D844 010000000000114500E0FB440100000000700745008007450100000000E0FB44 000011450100000000E0D8440000FF440300000000E0D8440000FF44} Fill.Color = x00303030 Margins.Left = 3.000000000000000000 Margins.Top = 3.000000000000000000 Margins.Right = 3.000000000000000000 Margins.Bottom = 2.000000000000000000 Size.Width = 10.000000000000000000 Size.Height = 10.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None object TColorAnimation Duration = 0.100000001490116100 PropertyName = 'Fill.Color' StartValue = x00303030 StopValue = xFF303030 Trigger = 'IsChecked=true' Source = Component // 指定触发源为宿主复选框 end object TColorAnimation Duration = 0.1 // 调整为合理时长避免渲染异常 PropertyName = 'Fill.Color' StartValue = xFF303030 StopValue = x00303030 Trigger = 'IsChecked=false' Source = Component // 指定触发源为宿主复选框 end end
你也可以替换为Trigger+TriggerReverse的配对写法简化配置,仅保留一个动画即可实现双向状态切换:
object TColorAnimation Duration = 0.1 PropertyName = 'Fill.Color' StartValue = x00303030 StopValue = xFF303030 Trigger = 'IsChecked=true' TriggerReverse = 'IsChecked=false' Source = Component end
内容的提问来源于stack exchange,提问作者Byte Player
相关产品推荐
相关产品推荐

