mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-19 15:20:25 +08:00
6.7 KiB
6.7 KiB
ButtonSpinner 自定义样式指南
ButtonSpinner 的视觉表现通过 ControlTheme + Design Token 系统控制。由于 ButtonSpinner 是一个复合控件(由 ButtonSpinnerDecoratedBox、ButtonSpinnerHandle、IconButton 等内部组件组成),样式定制涉及多个层级。
1. 通过属性直接控制
最简单的方式是通过 ButtonSpinner 的公共属性来控制外观。
尺寸
<atom:ButtonSpinner SizeType="Large"> <!-- 40px 高度 -->
<atom:ButtonSpinner SizeType="Middle"> <!-- 32px 高度(默认) -->
<atom:ButtonSpinner SizeType="Small"> <!-- 24px 高度 -->
样式变体
<atom:ButtonSpinner StyleVariant="Outline"> <!-- 线框(默认) -->
<atom:ButtonSpinner StyleVariant="Filled"> <!-- 填充背景 -->
<atom:ButtonSpinner StyleVariant="Borderless"> <!-- 无边框 -->
验证状态
<atom:ButtonSpinner Status="Error"> <!-- 红色边框/背景 -->
<atom:ButtonSpinner Status="Warning"> <!-- 黄色边框/背景 -->
操作按钮位置
<atom:ButtonSpinner ButtonSpinnerLocation="Right"> <!-- 右侧(默认) -->
<atom:ButtonSpinner ButtonSpinnerLocation="Left"> <!-- 左侧 -->
操作按钮控制
<atom:ButtonSpinner ShowButtonSpinner="False"> <!-- 隐藏操作按钮 -->
<atom:ButtonSpinner IsButtonSpinnerFloatable="True"> <!-- 浮动操作按钮 -->
<atom:ButtonSpinner AllowSpin="False"> <!-- 禁止 Spin 操作 -->
附加组件与前后缀
<atom:ButtonSpinner LeftAddOn="http://" RightAddOn=".com">
<atom:ButtonSpinner InnerLeftContent="¥" InnerRightContent="RMB">
<atom:ButtonSpinner
InnerLeftContent="{antdicons:AntDesignIconProvider Kind=UserOutlined, FillBrush=#D7D7D7}"
InnerRightContent="{antdicons:AntDesignIconProvider Kind=InfoCircleOutlined, FillBrush=#8C8C8C}">
📖 完整示例参考:
controlgallery/AtomUIGallery/ShowCases/Views/Navigation/ButtonSpinnerShowCase.axaml
2. 通过 Style 覆盖样式
全局样式
<Window.Styles>
<!-- 所有 ButtonSpinner 的统一宽度 -->
<Style Selector="atom|ButtonSpinner">
<Setter Property="Width" Value="300" />
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
<!-- 大号 ButtonSpinner 的特殊样式 -->
<Style Selector="atom|ButtonSpinner[SizeType=Large]">
<Setter Property="Margin" Value="0,0,0,10" />
</Style>
</Window.Styles>
按样式变体定制
<Window.Styles>
<!-- Filled 变体的自定义背景 -->
<Style Selector="atom|ButtonSpinner[StyleVariant=Filled]">
<Setter Property="Margin" Value="0,5" />
</Style>
<!-- Borderless 变体的底部间距 -->
<Style Selector="atom|ButtonSpinner[StyleVariant=Borderless]">
<Setter Property="Margin" Value="0,5" />
</Style>
</Window.Styles>
按状态定制
<Window.Styles>
<!-- Error 状态的自定义间距 -->
<Style Selector="atom|ButtonSpinner[Status=Error]">
<Setter Property="Margin" Value="0,5" />
</Style>
<!-- Warning 状态的自定义间距 -->
<Style Selector="atom|ButtonSpinner[Status=Warning]">
<Setter Property="Margin" Value="0,5" />
</Style>
</Window.Styles>
3. 伪类驱动的样式
按钮位置伪类
<Window.Styles>
<!-- 左侧按钮模式 -->
<Style Selector="atom|ButtonSpinner:left">
<Setter Property="Margin" Value="0,5" />
</Style>
<!-- 右侧按钮模式(默认) -->
<Style Selector="atom|ButtonSpinner:right">
<Setter Property="Margin" Value="0,5" />
</Style>
</Window.Styles>
标准伪类
<Window.Styles>
<Style Selector="atom|ButtonSpinner:disabled">
<!-- 禁用态样式 -->
</Style>
<Style Selector="atom|ButtonSpinner:pointerover">
<!-- 悬浮态样式 -->
</Style>
<Style Selector="atom|ButtonSpinner:focus-within">
<!-- 子控件获得焦点态 -->
</Style>
</Window.Styles>
4. 控制动画行为
<!-- 禁用过渡动画 -->
<atom:ButtonSpinner IsMotionEnabled="False">
<atom:TextBlock Text="无动画" />
</atom:ButtonSpinner>
ButtonSpinner 的以下动画效果受 IsMotionEnabled 控制:
- 操作按钮区域的悬浮/焦点边框颜色过渡
- 浮动模式下操作按钮的滑入/滑出动画
- 浮动模式下内容区域的位移动画
样式选择器速查
说明:Avalonia 样式选择器中使用
atom|ButtonSpinner语法引用atomXML 命名空间下的控件类型。
按控件类型
| 选择器 | 说明 |
|---|---|
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 |
减少按钮按下态 |