Files
AtomUI/docs/Desktop.Controls/ListView/ListViewAPI.md
T

301 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ListView API 参考
## 命名空间
```csharp
namespace AtomUI.Desktop.Controls;
```
AXAML 命名空间前缀:`atom`(`xmlns:atom="https://atomui.net"`)
---
## 枚举类型
### ListPaginationVisibility
分页器可见性枚举。
| 值 | 说明 |
|---|---|
| `None` | 不显示分页器 |
| `Top` | 仅显示顶部分页器 |
| `Bottom` | 仅显示底部分页器(默认) |
| `Both` | 同时显示顶部和底部分页器 |
### PaginationAlign(来自 `AtomUI.Desktop.Controls`)
分页器对齐方式。
| 值 | 说明 |
|---|---|
| `Start` | 左对齐 |
| `Center` | 居中对齐 |
| `End` | 右对齐(默认) |
### SelectionMode(来自 Avalonia)
选择模式,Flags 枚举,可组合使用。
| 值 | 说明 |
|---|---|
| `Single` | 单选(默认) |
| `Multiple` | 多选(配合 Ctrl/Shift 键) |
| `Toggle` | 切换选择(点击已选中项取消选中) |
| `AlwaysSelected` | 始终有选中项(不允许取消所有选择) |
### SizeType(来自 `AtomUI.Controls`)
| 值 | 说明 |
|---|---|
| `Small` | 小号 |
| `Middle` | 中号(默认) |
| `Large` | 大号 |
---
## ListView
`AtomUI.Desktop.Controls.ListView` 继承自 `Avalonia.Controls.ItemsControl`,自行实现了完整的选择系统。
### 公共属性(StyledProperty)
#### 基础属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `IsSelectable` | `bool` | `true` | 是否允许选择项目(`false` 时禁用选择,纯展示模式) |
| `SizeType` | `SizeType` | `Middle` | 列表尺寸(共享属性,通过 `AddOwner` 注册) |
| `IsBorderless` | `bool` | `false` | 是否无边框模式(嵌入其他控件时使用) |
| `IsMotionEnabled` | `bool` | 跟随全局 Token | 是否启用过渡动画 |
| `ItemClickMode` | `ClickMode` | `Release` | 列表项点击触发时机 |
#### 选择属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `SelectionMode` | `SelectionMode` | `Single` | 选择模式(Single / Multiple / Toggle / AlwaysSelected) |
| `AutoScrollToSelectedItem` | `bool` | `true` | 选中项变化时是否自动滚动到可视区域 |
| `IsTextSearchEnabled` | `bool` | `false` | 是否启用键入文本快速搜索 |
| `WrapSelection` | `bool` | `false` | 键盘导航到末尾时是否循环到开头 |
| `SelectedValueBinding` | `IBinding?` | `null` | 用于从选中项中提取 `SelectedValue` 的绑定 |
| `SelectedValue` | `object?` | `null` | 通过 `SelectedValueBinding` 从选中项提取的值(双向绑定) |
#### 视觉定制属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `ItemHoverBg` | `IBrush?` | 由 Token 控制 | 列表项悬浮态背景色 |
| `ItemSelectedBg` | `IBrush?` | 由 Token 控制 | 列表项选中态背景色 |
| `IsShowSelectedIndicator` | `bool` | `false` | 是否显示选中指示器(勾选图标) |
| `SelectedIndicator` | `IconTemplate?` | `CheckOutlined` | 选中指示器图标模板 |
#### 空状态属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `IsShowEmptyIndicator` | `bool` | `true` | 是否在列表为空时显示空状态指示器 |
| `EmptyIndicator` | `object?` | `null` | 空状态指示器内容 |
| `EmptyIndicatorTemplate` | `IDataTemplate?` | `Empty(Simple)` | 空状态指示器数据模板(默认为 Simple Empty 控件) |
| `EmptyIndicatorPadding` | `Thickness` | 由 Token 控制 | 空状态指示器内边距 |
#### 分组属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `IsGroupEnabled` | `bool` | `false` | 是否启用分组 |
| `GroupPropertySelector` | `DefaultFilterValueSelector?` | 默认使用 `IGroupHeader.Group` | 分组键提取委托 |
| `GroupItemTemplate` | `IDataTemplate?` | `null` | 分组标题项的数据模板 |
#### 排序与过滤属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `SortDescriptions` | `IList<IListSortDescription>?` | `null` | 排序描述集合 |
| `Filter` | `IValueFilter?` | `null` | 过滤器实例 |
| `FilterValue` | `object?` | `null` | 过滤关键字 |
| `FilterValueSelector` | `DefaultFilterValueSelector?` | 默认提取 `IListItemData.Content` | 过滤值提取委托 |
#### 分页属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `TopPagination` | `AbstractPagination?` | `null` | 顶部分页器控件 |
| `BottomPagination` | `AbstractPagination?` | `null` | 底部分页器控件 |
| `PageIndex` | `int` | `1` | 当前页索引 |
| `PageSize` | `int` | `0` | 每页数据量(`0` 表示不分页) |
| `PaginationVisibility` | `ListPaginationVisibility` | `Bottom` | 分页器显示位置 |
| `TopPaginationAlign` | `PaginationAlign` | `End` | 顶部分页器对齐方式 |
| `BottomPaginationAlign` | `PaginationAlign` | `End` | 底部分页器对齐方式 |
| `IsHideOnSinglePage` | `bool` | `false` | 仅一页时是否隐藏分页器 |
#### 加载状态属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `IsOperating` | `bool` | `false` | 是否正在操作中(显示加载遮罩) |
| `OperatingMsg` | `string?` | `null` | 操作中提示文本 |
| `CustomOperatingIndicator` | `object?` | `null` | 自定义操作指示器内容 |
| `CustomOperatingIndicatorTemplate` | `IDataTemplate?` | `null` | 自定义操作指示器数据模板 |
### 只读属性(DirectProperty)
| 属性名 | 类型 | 说明 |
|---|---|---|
| `SelectedIndex` | `int` | 当前选中的索引(双向绑定) |
| `SelectedItem` | `object?` | 当前选中的项目(双向绑定) |
| `SelectedItems` | `IList?` | 多选时的选中项集合 |
| `Selection` | `ISelectionModel` | 选择模型实例(可替换为自定义实现) |
| `IsFiltering` | `bool` | 是否正在过滤(当 `Filter` 和 `FilterValue` 都非空时为 `true`) |
| `TotalItemCount` | `int` | 数据项总数(包含所有页面) |
### 继承自 Avalonia ItemsControl 的常用属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `Items` | `ItemCollection` | 空集合 | 项目集合(直接添加) |
| `ItemsSource` | `IEnumerable?` | `null` | 数据源绑定(自动包装为 `IListCollectionView`) |
| `ItemTemplate` | `IDataTemplate?` | 自定义(见主题) | 项目数据模板 |
| `ItemsPanel` | `ITemplate<Panel>?` | `VirtualizingStackPanel` | 项目面板模板 |
| `ItemCount` | `int` | `0` | 当前页的项目数量(只读) |
| `DisplayMemberBinding` | `IBinding?` | `null` | 显示成员绑定 |
| `Background` | `IBrush?` | — | 背景色 |
| `BorderBrush` | `IBrush?` | 由 Token 控制 | 边框颜色 |
| `BorderThickness` | `Thickness` | 由 Token 控制 | 边框粗细 |
| `CornerRadius` | `CornerRadius` | 由 Token 控制 | 圆角半径 |
| `Padding` | `Thickness` | 由 Token 控制 | 内边距 |
### 附加属性
| 属性名 | 类型 | 说明 |
|---|---|---|
| `IsSelected` | `bool`(附加属性) | 用于标记容器控件是否被选中(`GetIsSelected` / `SetIsSelected`) |
### 事件
| 事件名 | 类型 | 说明 |
|---|---|---|
| `ItemClicked` | `EventHandler<ListViewItemClickedEventArgs>` | 列表项被点击时触发(CLR 事件) |
| `ItemCountChanged` | `EventHandler<ItemCountChangedEventArgs>` | 列表项目数量变化时触发(CLR 事件) |
| `FilterContextChanged` | `EventHandler?` | 过滤上下文变化时触发(CLR 事件) |
| `SelectionChanged` | `EventHandler<SelectionChangedEventArgs>` | 选择变化时触发(路由事件,冒泡) |
### 实现的接口
| 接口 | 说明 |
|---|---|
| `ISizeTypeAware` | 支持三种尺寸切换 |
| `IMotionAwareControl` | 支持动画开关 |
| `IListVirtualizingContextAware` | 虚拟化上下文管理 |
---
## ListViewItem
`AtomUI.Desktop.Controls.ListViewItem` 继承自 `Avalonia.Controls.ContentControl`,是 ListView 中每个选项的容器控件。
> ⚠️ ListViewItem 的大部分扩展属性为 `internal`,由 ListView 在 `PrepareContainerForItemOverride` 中自动传递。通常不需要手动设置。
### 公共属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `IsSelected` | `bool` | `false` | 是否选中(通过 `AddOwner` 从 `ListView.IsSelectedProperty` 注册) |
### 公共事件
| 事件名 | 类型 | 路由策略 | 说明 |
|---|---|---|---|
| `Clicked` | `EventHandler<RoutedEventArgs>` | `Bubble` | 列表项点击时触发 |
### 继承自 Avalonia ContentControl 的常用属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `Content` | `object?` | `null` | 列表项内容 |
| `ContentTemplate` | `IDataTemplate?` | `null` | 内容数据模板 |
| `IsEnabled` | `bool` | `true` | 是否启用 |
| `Foreground` | `IBrush?` | 由 Token 控制 | 文本前景色 |
| `Background` | `IBrush?` | 由 Token 控制 | 背景色 |
| `Padding` | `Thickness` | 由 Token 控制 | 内边距 |
| `CornerRadius` | `CornerRadius` | 由 Token 控制 | 圆角半径 |
### 实现的接口
| 接口 | 说明 |
|---|---|
| `IListItemVirtualizingContextAware` | 虚拟化上下文感知(保存/恢复虚拟化索引) |
| `ISelectable` | 可选择标记接口 |
### 伪类(Pseudo-Classes)
| 伪类 | 触发条件 |
|---|---|
| `:selected` | `IsSelected == true` |
| `:pointerover` | 鼠标悬浮 |
| `:pressed` | 鼠标按下 |
| `:disabled` | `IsEnabled == false` |
---
## ListView 伪类
| 伪类 | 常量 | 触发条件 |
|---|---|---|
| `:empty` | `ListPseudoClass.Empty` | `TotalItemCount == 0` |
| `:singleitem` | `ListPseudoClass.SingleItem` | `TotalItemCount == 1` |
---
## 辅助类型
### ListViewItemClickedEventArgs
```csharp
public class ListViewItemClickedEventArgs : EventArgs
{
public ListViewItem Item { get; }
}
```
### IValueFilter(来自 `AtomUI.Controls.Shared`)
过滤器接口,允许自定义过滤逻辑。
```csharp
public interface IValueFilter
{
ValueFilterMode Mode => ValueFilterMode.Custom;
bool Filter(object? value, object? filterValue);
}
```
### DefaultFilterValueSelector(来自 `AtomUI.Controls.Shared`)
从数据记录中提取过滤/分组属性值的委托类型。
```csharp
public delegate object? DefaultFilterValueSelector(object record);
```
### IListItemData(来自 `AtomUI.Controls.Shared`)
列表数据项的标准接口。当 `ItemsSource` 中的数据实现此接口时,ListView 能自动提取内容文本用于展示。
### ItemCountChangedEventArgs(来自 `AtomUI.Controls.Shared`)
```csharp
public class ItemCountChangedEventArgs : EventArgs
{
public int ItemCount { get; }
}
```
### IGroupHeader
分组标题接口。数据项实现此接口后,默认 `GroupPropertySelector` 会使用其 `Group` 属性作为分组键。
### ListSortDescription
排序描述,用于配置 `SortDescriptions` 属性。可通过 `ListSortDescription.FromPath("PropertyName")` 快速创建。