# Segmented 自定义样式指南 Segmented 的视觉表现通过 `ControlTheme` + Design Token 系统控制。以下介绍几种常见的自定义方式。 --- ## 1. 使用属性直接控制 最简单的方式是通过 Segmented 的公共属性来控制外观: ```xml Daily Weekly Monthly 123 456 longtext-longtext ... ... List Kanban Daily Weekly Monthly ``` > 📖 完整示例参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/SegmentedShowCase.axaml` --- ## 2. 通过 Style 覆盖样式 可以在 AXAML 中使用 `Style` 对 Segmented 进行全局或局部样式覆盖: ### 全局统一外边距 ```xml ``` ### 自定义选项悬浮态颜色 ```xml ``` ### 使用伪类选择器 ```xml ``` ### 按尺寸定制 ```xml ``` --- ## 3. 通过 ControlTheme 完全替换主题 如果需要彻底替换 Segmented 的模板和样式,可以定义自定义 `ControlTheme`: ```xml A B ``` > ⚠️ 注意:完全替换 ControlTheme 将丢失内置的滑动色块渲染和动画效果。Segmented 的色块是在 `Render` 方法中绘制的,替换模板不会影响色块,但更换 ItemsPanel 可能影响布局和动画定位。建议优先使用 Style 覆盖。 --- ## 4. Block 模式(撑满父容器) Ant Design 的 `block` 属性在 AtomUI 中通过 `IsExpanding` 属性实现: ```xml 123 456 longtext-longtext-longtext-longtext ``` > 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/SegmentedShowCase.axaml` 中 "Block Segmented" 示例。 --- ## 5. 控制动画行为 ```xml A B C ``` --- ## 样式选择器速查 > 说明:Avalonia 样式选择器中使用 `atom|Segmented` 语法引用 `atom` XML 命名空间下的 `Segmented` 类型,其中 `|` 是命名空间分隔符。 ### Segmented 选择器 | 选择器 | 说明 | |---|---| | `atom\|Segmented` | 匹配所有 AtomUI Segmented 实例 | | `atom\|Segmented[SizeType=Large]` | 匹配大号 Segmented | | `atom\|Segmented[SizeType=Middle]` | 匹配中号 Segmented(默认尺寸) | | `atom\|Segmented[SizeType=Small]` | 匹配小号 Segmented | | `atom\|Segmented[IsExpanding=True]` | 匹配 Block 模式的 Segmented | ### SegmentedItem 选择器 | 选择器 | 说明 | |---|---| | `atom\|SegmentedItem` | 匹配所有 SegmentedItem 实例 | | `atom\|SegmentedItem:selected` | 匹配当前选中的选项 | | `atom\|SegmentedItem:not(:selected)` | 匹配未选中的选项 | | `atom\|SegmentedItem:pointerover` | 匹配鼠标悬浮状态的选项 | | `atom\|SegmentedItem:pressed` | 匹配鼠标按下状态的选项 | | `atom\|SegmentedItem:disabled` | 匹配禁用的选项 | | `atom\|SegmentedItem:has-icon` | 匹配带图标的选项 | | `atom\|SegmentedItem[SizeType=Large]` | 匹配大号选项 | | `atom\|SegmentedItem[SizeType=Small]` | 匹配小号选项 | ### 组合选择器示例 | 选择器 | 说明 | |---|---| | `atom\|SegmentedItem[IsEnabled=True]:not(:selected):pointerover` | 未选中且可交互的悬浮态选项 | | `atom\|SegmentedItem[IsEnabled=True]:not(:selected):pressed` | 未选中且可交互的按下态选项 | | `atom\|SegmentedItem:selected /template/ atom\|IconPresenter#IconPresenter` | 选中选项的图标展示器 | | `atom\|SegmentedItem:has-icon /template/ ContentPresenter#Content` | 带图标选项的内容展示器 | | `atom\|Segmented /template/ Border#Frame` | Segmented 模板内的 Frame Border |