# GroupBox 自定义样式指南
GroupBox 的视觉表现通过 `ControlTheme` + Design Token 系统控制。以下介绍几种常见的自定义方式。
---
## 1. 使用属性直接控制
最简单的方式是通过 GroupBox 的公共属性来控制外观:
```xml
Content
Content
Content
Content
Content
Content
```
> 📖 完整示例参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/GroupBoxShowCase.axaml`
---
## 2. 通过 Style 覆盖样式
可以在 AXAML 中使用 `Style` 对 GroupBox 进行全局或局部样式覆盖:
### 全局统一边框和圆角
```xml
```
### 自定义背景色和边框色
```xml
```
> ⚠️ 注意:`Background` 属性同时影响边框区域的背景和标题遮挡区域的填充色。如果设置为透明,标题区域将不会遮挡边框线段,fieldset 效果会失效。
### 按标题位置定制样式
```xml
```
### 自定义标题区域模板部件
通过模板选择器可以深入定制标题区域的内部元素:
```xml
```
---
## 3. 通过 ControlTheme 完全替换主题
如果需要彻底替换 GroupBox 的模板和样式,可以定义自定义 `ControlTheme`:
```xml
Content
```
> ⚠️ 注意:完全替换 ControlTheme 将丢失内置的 fieldset 式边框渲染效果(标题遮挡边框),因为该效果依赖 `GroupBox.Render()` 的自定义绘制逻辑和特定的模板部件命名。建议优先使用 Style 覆盖。
---
## 4. 自定义边框和背景的注意事项
GroupBox 的边框和背景通过 `Render()` 方法自定义绘制,而不是通过模板中的 `Border` 控件属性设置。因此:
- `Background`、`BorderBrush`、`BorderThickness`、`CornerRadius` 属性虽然在模板的 `Border#PART_Frame` 上通过 `TemplateBinding` 传递了 `CornerRadius`,但实际的边框和背景绘制由 `Render()` 接管
- 修改这些属性会正确生效,因为 `Render()` 读取的是控件上的这些属性值
- 如果将 `Background` 设为 `null` 或透明色,标题遮挡区域会使用透明填充,导致边框线穿过标题区域
---
## 样式选择器速查
> 说明:Avalonia 样式选择器中使用 `atom|GroupBox` 语法引用 `atom` XML 命名空间下的 `GroupBox` 类型,其中 `|` 是命名空间分隔符。
### 按控件类型选择
| 选择器 | 说明 |
|---|---|
| `atom\|GroupBox` | 匹配所有 AtomUI GroupBox 实例 |
### 按属性选择
| 选择器 | 说明 |
|---|---|
| `atom\|GroupBox[HeaderTitlePosition=Left]` | 匹配标题左对齐的 GroupBox |
| `atom\|GroupBox[HeaderTitlePosition=Center]` | 匹配标题居中的 GroupBox |
| `atom\|GroupBox[HeaderTitlePosition=Right]` | 匹配标题右对齐的 GroupBox |
### 按伪类选择
| 选择器 | 说明 |
|---|---|
| `atom\|GroupBox:pointerover` | 匹配鼠标悬浮状态 |
| `atom\|GroupBox:disabled` | 匹配禁用状态(`IsEnabled == false`) |
### 模板部件选择器
| 选择器 | 说明 |
|---|---|
| `atom\|GroupBox /template/ Border#PART_Frame` | 主框架 Border |
| `atom\|GroupBox /template/ Panel#PART_HeaderContainer` | 标题区域容器 |
| `atom\|GroupBox /template/ Decorator#PART_HeaderContent` | 标题内容定位器 |
| `atom\|GroupBox /template/ atom\|IconPresenter#PART_HeaderIconPresenter` | 标题图标展示器 |
| `atom\|GroupBox /template/ atom\|TextBlock#PART_HeaderPresenter` | 标题文本 |
| `atom\|GroupBox /template/ ContentPresenter#PART_ContentPresenter` | 内容展示器 |
### 组合选择器示例
| 选择器 | 说明 |
|---|---|
| `atom\|GroupBox[HeaderTitlePosition=Center] /template/ Decorator#PART_HeaderContent` | 居中标题的内容定位器 |
| `atom\|GroupBox:disabled /template/ atom\|TextBlock#PART_HeaderPresenter` | 禁用状态下的标题文本 |