# ListView 自定义样式指南 ListView 的视觉表现通过 `ControlTheme` + Design Token 系统控制。以下介绍几种常见的自定义方式。 --- ## 1. 使用属性直接控制 最简单的方式是通过 ListView 的公共属性来控制外观: ```xml ``` > 📖 完整示例参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/ListShowCase.axaml` --- ## 2. 通过 Style 覆盖样式 可以在 AXAML 中使用 `Style` 对 ListView 进行全局或局部样式覆盖: ### 全局统一外观 ```xml ``` ### 按尺寸定制 ```xml ``` ### 空状态下的特殊样式 ```xml ``` ### 自定义 ListViewItem 样式 ```xml ``` --- ## 3. 自定义 ItemTemplate 通过 `ItemTemplate` 完全定制每个列表项的展示内容: ```xml ``` --- ## 4. 自定义分组标题模板 当启用分组时,可通过 `GroupItemTemplate` 定制分组标题: ```xml ``` > 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/ListShowCase.axaml` 中 "Group" 示例。 --- ## 5. 自定义空状态指示器 ```xml ``` > 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/ListShowCase.axaml` 中 "Empty" 示例。 --- ## 6. 通过 ControlTheme 完全替换主题 如果需要彻底替换 ListView 的模板和样式,可以定义自定义 `ControlTheme`: ```xml ``` > ⚠️ 注意:完全替换 ControlTheme 将丢失内置的分页器集成、空状态展示、加载状态覆盖等功能。建议优先使用 Style 覆盖和 ItemTemplate 自定义。 --- ## 7. 控制动画行为 ```xml ``` --- ## 样式选择器速查 > 说明:Avalonia 样式选择器中使用 `atom|ListView` 语法引用 `atom` XML 命名空间下的 `ListView` 类型,其中 `|` 是命名空间分隔符。 ### 按类型选择 | 选择器 | 说明 | |---|---| | `atom\|ListView` | 匹配所有 AtomUI ListView 实例 | | `atom\|ListViewItem` | 匹配所有 ListView 列表项 | ### 按尺寸选择 | 选择器 | 说明 | |---|---| | `atom\|ListView[SizeType=Large]` | 匹配大号列表 | | `atom\|ListView[SizeType=Middle]` | 匹配中号列表(默认) | | `atom\|ListView[SizeType=Small]` | 匹配小号列表 | ### 按属性选择 | 选择器 | 说明 | |---|---| | `atom\|ListView[IsBorderless=True]` | 匹配无边框列表 | | `atom\|ListView[IsGroupEnabled=True]` | 匹配启用分组的列表 | | `atom\|ListView[IsSelectable=False]` | 匹配禁用选择的列表 | ### 按伪类选择 | 选择器 | 说明 | |---|---| | `atom\|ListView:empty` | 匹配无数据的列表(`TotalItemCount == 0`) | | `atom\|ListView:singleitem` | 匹配仅有一项数据的列表 | ### ListViewItem 伪类选择 | 选择器 | 说明 | |---|---| | `atom\|ListViewItem:selected` | 匹配选中状态的列表项 | | `atom\|ListViewItem:pointerover` | 匹配鼠标悬浮的列表项 | | `atom\|ListViewItem:pressed` | 匹配按下状态的列表项 | | `atom\|ListViewItem:disabled` | 匹配禁用的列表项 | ### ListViewItem 属性选择 | 选择器 | 说明 | |---|---| | `atom\|ListViewItem[IsGroupItem=True]` | 匹配分组标题项 | | `atom\|ListViewItem[IsGroupItem=False]` | 匹配非分组标题项(普通数据项) | | `atom\|ListViewItem[SizeType=Large]` | 匹配大号列表项 | | `atom\|ListViewItem[SizeType=Small]` | 匹配小号列表项 | ### 组合选择器示例 | 选择器 | 说明 | |---|---| | `atom\|ListViewItem[IsGroupItem=False]:selected:not(:disabled)` | 非禁用状态的选中数据项 | | `atom\|ListViewItem[IsGroupItem=False]:pointerover` | 鼠标悬浮的数据项(排除分组标题) | | `atom\|ListView /template/ Border#Frame` | 访问 ListView 模板内的主框架 Border | | `atom\|ListViewItem /template/ ContentPresenter#ContentPresenter` | 访问列表项模板内的内容展示器 |