# TabControl 自定义样式指南 本文档介绍如何通过 Avalonia 的 `Style` 机制自定义 TabControl 控件家族的视觉表现。 > 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/Navigation/TabControlShowCase.axaml` --- ## 1. 通过属性直接控制 最简单的定制方式是通过控件公开的属性: ```xml 内容 1 内容 2 内容 1 内容 2 ``` --- ## 2. 通过 Style 覆盖 ### 2.1 修改标签文本样式 ```xml ``` ### 2.2 修改标签栏边框 ```xml ``` ### 2.3 根据方向定制样式 利用伪类 `:top` / `:bottom` / `:left` / `:right`: ```xml ``` ### 2.4 定制单个标签项状态 ```xml ``` --- ## 3. 样式选择器速查 ### TabControl / CardTabControl 选择器 | 选择器 | 说明 | |---|---| | `atom\|TabControl` | 匹配所有线条式 TabControl | | `atom\|CardTabControl` | 匹配所有卡片式 TabControl | | `atom\|BaseTabControl` | 匹配两种 TabControl 基类 | | `atom\|TabControl:top` | 标签栏在顶部 | | `atom\|TabControl:bottom` | 标签栏在底部 | | `atom\|TabControl:left` | 标签栏在左侧 | | `atom\|TabControl:right` | 标签栏在右侧 | ### TabStrip / CardTabStrip 选择器 | 选择器 | 说明 | |---|---| | `atom\|TabStrip` | 匹配所有线条式 TabStrip | | `atom\|CardTabStrip` | 匹配所有卡片式 TabStrip | | `atom\|TabStrip:top` | 标签栏在顶部 | | `atom\|TabStrip:left` | 标签栏在左侧 | ### TabItem / TabStripItem 选择器 | 选择器 | 说明 | |---|---| | `atom\|TabItem` | 匹配所有 TabItem | | `atom\|TabItem:selected` | 选中的标签 | | `atom\|TabItem:pointerover` | 鼠标悬浮的标签 | | `atom\|TabItem:pressed` | 鼠标按下的标签 | | `atom\|TabItem:disabled` | 禁用的标签 | | `atom\|TabStripItem` | 匹配所有 TabStripItem | | `atom\|TabStripItem:selected` | 选中的 StripItem | ### 模板内部选择器 | 选择器 | 说明 | |---|---| | `atom\|TabItem /template/ atom\|IconPresenter#ItemIconPresenter` | 标签图标 | | `atom\|TabItem /template/ atom\|IconButton#PART_ItemCloseButton` | 关闭按钮 | | `atom\|TabItem /template/ ContentPresenter#ContentPresenter` | 标签标题内容 | --- ## 4. 通过 Token 主题全局定制 如果需要全局修改 TabControl 的外观,建议通过 Token 系统而非直接修改 Style,以保持主题一致性。 详见 [TabControl Design Token](./TabControlToken.md) 文档。 --- ## 5. Gallery 中的示例 以下示例均可在 Gallery 项目中查看实际效果: | 示例 | 说明 | 关键属性 | |---|---|---| | Basic | 基本三标签切换 | 默认配置 | | Disabled | 禁用特定标签 | `IsEnabled="False"` | | Centered | 标签居中 | `TabAlignmentCenter="True"` | | Icon | 带图标标签 | `Icon="{antdicons:AntDesignIconProvider}"` | | Slide | 标签溢出滚动 | 20+ 标签 | | Card type tab | 卡片式标签 | `atom:CardTabControl` | | Closable Tab | 可关闭标签 | `IsTabClosable="True"` | | Position | 四方向切换 | `TabStripPlacement` | | Size | 三种尺寸 | `SizeType` | | Add and close | 添加/关闭标签 | `IsShowAddTabButton="True"` | | Extra content | 头部额外内容 | `HeaderStartExtraContent` / `HeaderEndExtraContent` | > 📖 完整示例路径:`controlgallery/AtomUIGallery/ShowCases/Views/Navigation/TabControlShowCase.axaml`