# ButtonSpinner 自定义样式指南 ButtonSpinner 的视觉表现通过 `ControlTheme` + Design Token 系统控制。由于 ButtonSpinner 是一个复合控件(由 `ButtonSpinnerDecoratedBox`、`ButtonSpinnerHandle`、`IconButton` 等内部组件组成),样式定制涉及多个层级。 --- ## 1. 通过属性直接控制 最简单的方式是通过 ButtonSpinner 的公共属性来控制外观。 ### 尺寸 ```xml ``` ### 样式变体 ```xml ``` ### 验证状态 ```xml ``` ### 操作按钮位置 ```xml ``` ### 操作按钮控制 ```xml ``` ### 附加组件与前后缀 ```xml ``` > 📖 完整示例参考:`controlgallery/AtomUIGallery/ShowCases/Views/Navigation/ButtonSpinnerShowCase.axaml` --- ## 2. 通过 Style 覆盖样式 ### 全局样式 ```xml ``` ### 按样式变体定制 ```xml ``` ### 按状态定制 ```xml ``` --- ## 3. 伪类驱动的样式 ### 按钮位置伪类 ```xml ``` ### 标准伪类 ```xml ``` --- ## 4. 控制动画行为 ```xml ``` ButtonSpinner 的以下动画效果受 `IsMotionEnabled` 控制: - 操作按钮区域的悬浮/焦点边框颜色过渡 - 浮动模式下操作按钮的滑入/滑出动画 - 浮动模式下内容区域的位移动画 --- ## 样式选择器速查 > 说明:Avalonia 样式选择器中使用 `atom|ButtonSpinner` 语法引用 `atom` XML 命名空间下的控件类型。 ### 按控件类型 | 选择器 | 说明 | |---|---| | `atom\|ButtonSpinner` | 匹配所有 ButtonSpinner 实例 | ### 按属性 | 选择器 | 说明 | |---|---| | `atom\|ButtonSpinner[SizeType=Large]` | 大号尺寸 | | `atom\|ButtonSpinner[SizeType=Middle]` | 中号尺寸(默认) | | `atom\|ButtonSpinner[SizeType=Small]` | 小号尺寸 | | `atom\|ButtonSpinner[StyleVariant=Outline]` | 线框样式变体 | | `atom\|ButtonSpinner[StyleVariant=Filled]` | 填充样式变体 | | `atom\|ButtonSpinner[StyleVariant=Borderless]` | 无边框样式变体 | | `atom\|ButtonSpinner[Status=Error]` | 错误验证状态 | | `atom\|ButtonSpinner[Status=Warning]` | 警告验证状态 | | `atom\|ButtonSpinner[ButtonSpinnerLocation=Left]` | 操作按钮在左侧 | | `atom\|ButtonSpinner[ButtonSpinnerLocation=Right]` | 操作按钮在右侧 | ### 按伪类 | 选择器 | 说明 | |---|---| | `atom\|ButtonSpinner:left` | 操作按钮在左侧时 | | `atom\|ButtonSpinner:right` | 操作按钮在右侧时 | | `atom\|ButtonSpinner:disabled` | 禁用状态 | | `atom\|ButtonSpinner:pointerover` | 鼠标悬浮 | | `atom\|ButtonSpinner:focus` | 获得焦点 | | `atom\|ButtonSpinner:focus-within` | 子控件获得焦点 | ### 内部组件选择器 ButtonSpinner 的视觉呈现由多个内部组件协作实现。在高级定制场景下,可以通过模板部件选择器访问内部组件: | 选择器 | 说明 | |---|---| | `atom\|ButtonSpinner /template/ atom\|ButtonSpinnerDecoratedBox#PART_DecoratedBox` | 装饰容器 | | `atom\|ButtonSpinnerHandle` | 操作按钮容器(内部控件) | | `atom\|ButtonSpinnerHandle /template/ atom\|IconButton#PART_IncreaseButton` | 增加按钮 | | `atom\|ButtonSpinnerHandle /template/ atom\|IconButton#PART_DecreaseButton` | 减少按钮 | | `atom\|ButtonSpinnerHandle /template/ atom\|IconButton#PART_IncreaseButton:pointerover` | 增加按钮悬浮态 | | `atom\|ButtonSpinnerHandle /template/ atom\|IconButton#PART_DecreaseButton:pointerover` | 减少按钮悬浮态 | | `atom\|ButtonSpinnerHandle /template/ atom\|IconButton#PART_IncreaseButton:pressed` | 增加按钮按下态 | | `atom\|ButtonSpinnerHandle /template/ atom\|IconButton#PART_DecreaseButton:pressed` | 减少按钮按下态 |