# 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 |