mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-20 23:58:05 +08:00
375 lines
12 KiB
Markdown
375 lines
12 KiB
Markdown
# Select API 参考
|
||
|
||
## 命名空间
|
||
|
||
```csharp
|
||
namespace AtomUI.Desktop.Controls;
|
||
```
|
||
|
||
AXAML 命名空间前缀:`atom`(`xmlns:atom="https://atomui.net"`)
|
||
|
||
---
|
||
|
||
## 枚举类型
|
||
|
||
### SelectMode
|
||
|
||
选择模式枚举,定义 Select 的选择行为。
|
||
|
||
| 值 | 说明 |
|
||
|---|---|
|
||
| `Single` | 单选模式,选中后下拉自动关闭 |
|
||
| `Multiple` | 多选模式,已选项以标签形式展示 |
|
||
| `Tags` | 标签模式,在多选基础上允许自由输入创建新标签 |
|
||
|
||
### SelectPopupPlacement
|
||
|
||
下拉弹出面板的位置枚举。
|
||
|
||
| 值 | 说明 |
|
||
|---|---|
|
||
| `TopEdgeAlignedLeft` | 上方弹出,左对齐 |
|
||
| `TopEdgeAlignedRight` | 上方弹出,右对齐 |
|
||
| `BottomEdgeAlignedLeft` | 下方弹出,左对齐(默认) |
|
||
| `BottomEdgeAlignedRight` | 下方弹出,右对齐 |
|
||
|
||
### InputControlStyleVariant(来自 `AtomUI.Controls`)
|
||
|
||
输入控件样式变体枚举。
|
||
|
||
| 值 | 说明 |
|
||
|---|---|
|
||
| `Outline` | 有边框轮廓(默认) |
|
||
| `Filled` | 填充背景 |
|
||
| `Borderless` | 无边框 |
|
||
|
||
### InputControlStatus(来自 `AtomUI.Controls`)
|
||
|
||
输入控件验证状态枚举。
|
||
|
||
| 值 | 说明 |
|
||
|---|---|
|
||
| `Default` | 默认状态 |
|
||
| `Error` | 错误状态(红色边框) |
|
||
| `Warning` | 警告状态(橙色边框) |
|
||
|
||
### SizeType(来自 `AtomUI.Controls`)
|
||
|
||
尺寸类型枚举。
|
||
|
||
| 值 | 说明 |
|
||
|---|---|
|
||
| `Small` | 小号 |
|
||
| `Middle` | 中号(默认) |
|
||
| `Large` | 大号 |
|
||
|
||
---
|
||
|
||
## 核心数据类型
|
||
|
||
### ISelectOption 接口
|
||
|
||
选项数据接口,继承自 `IListItemData`。
|
||
|
||
```csharp
|
||
public interface ISelectOption : IListItemData
|
||
{
|
||
object? Header { get; } // 选项显示文本
|
||
bool IsDynamicAdded { get; } // 是否为 Tags 模式动态添加的选项
|
||
}
|
||
```
|
||
|
||
### SelectOption 记录类
|
||
|
||
内置的 `ISelectOption` 实现,支持分组。
|
||
|
||
```csharp
|
||
public record SelectOption : ListItemData, ISelectOption, IGroupListItemData
|
||
{
|
||
public object? Header { get; init; }
|
||
public bool IsDynamicAdded { get; init; } = false;
|
||
}
|
||
```
|
||
|
||
`ListItemData` 基类提供的关键属性:
|
||
|
||
| 属性 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `Content` | `object?` | 选项的值(用于匹配和提交) |
|
||
| `IsEnabled` | `bool` | 是否可选 |
|
||
| `Group` | `string?` | 分组名称(配合 `IsGroupEnabled` 使用) |
|
||
|
||
### ISelectOptionsAsyncLoader 接口
|
||
|
||
异步选项加载器接口。
|
||
|
||
```csharp
|
||
public interface ISelectOptionsAsyncLoader
|
||
{
|
||
Task<SelectOptionsLoadResult> LoadAsync(object? context, CancellationToken token);
|
||
}
|
||
```
|
||
|
||
### SelectOptionsLoadResult
|
||
|
||
异步加载结果。
|
||
|
||
| 属性 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `IsSuccess` | `bool` | 加载是否成功 |
|
||
| `StatusCode` | `RpcStatusCode` | 状态码 |
|
||
| `UserFriendlyMessage` | `string?` | 用户友好的错误信息 |
|
||
| `Data` | `IReadOnlyList<ISelectOption>?` | 加载到的选项数据 |
|
||
|
||
### SelectSelectionChangedEventArgs
|
||
|
||
选择变更事件参数。
|
||
|
||
| 属性 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `Mode` | `SelectMode` | 当前选择模式 |
|
||
| `OldValue` | `object?` | 变更前的值 |
|
||
| `NewValue` | `object?` | 变更后的值 |
|
||
|
||
### ISelectTagTextProvider 接口
|
||
|
||
自定义标签文本提供器接口。
|
||
|
||
```csharp
|
||
public interface ISelectTagTextProvider
|
||
{
|
||
string? TagText { get; }
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## AbstractSelect 公共属性
|
||
|
||
以下属性定义在 `AbstractSelect` 基类中,`Select` 自动继承。
|
||
|
||
### 基础行为属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `IsAllowClear` | `bool` | `false` | 是否显示清除按钮,允许一键清空已选值 |
|
||
| `IsAutoClearSearchValue` | `bool` | `false` | 选中选项后是否自动清除搜索文本 |
|
||
| `IsDefaultOpen` | `bool` | `false` | 初始渲染时是否默认展开下拉 |
|
||
| `IsDropDownOpen` | `bool` | `false` | 控制下拉面板的展开/关闭状态 |
|
||
| `IsFilterEnabled` | `bool` | `false` | 是否启用搜索过滤功能 |
|
||
| `IsPopupMatchSelectWidth` | `bool` | `true` | 下拉面板宽度是否与 Select 控件等宽 |
|
||
| `DisplayPageSize` | `int` | `10` | 下拉面板最多可见的选项条数(控制最大高度) |
|
||
| `Placement` | `SelectPopupPlacement` | `BottomEdgeAlignedLeft` | 下拉面板弹出位置 |
|
||
| `FilterValue` | `object?` | `null` | 当前搜索过滤值 |
|
||
|
||
### 占位文本属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `PlaceholderText` | `string?` | `null` | 未选中时显示的占位提示文本 |
|
||
| `PlaceholderForeground` | `IBrush?` | 由 Token 控制 | 占位文本颜色 |
|
||
|
||
### 多选标签属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `MaxCount` | `int` | `int.MaxValue` | 最大可选数量限制 |
|
||
| `IsShowMaxCountIndicator` | `bool` | `false` | 是否显示最大选择数指示器(如 `2/5`) |
|
||
| `MaxTagCount` | `int?` | `null` | 最多显示的标签数量,超出折叠为 `+N` |
|
||
| `IsResponsiveTagMode` | `bool` | `false` | 根据控件宽度自动计算可见标签数 |
|
||
| `MaxTagPlaceholder` | `string?` | `null` | 标签折叠后的自定义占位文本 |
|
||
|
||
### 图标属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `ClearIcon` | `PathIcon?` | `null` | 自定义清除图标 |
|
||
| `SuffixIcon` | `PathIcon?` | `DownOutlined` | 下拉箭头图标 |
|
||
| `SuffixLoadingIcon` | `PathIcon?` | `LoadingOutlined`(旋转) | 加载中图标 |
|
||
|
||
### 样式与状态属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `StyleVariant` | `InputControlStyleVariant` | `Outline` | 样式变体(Outlined/Filled/Borderless) |
|
||
| `Status` | `InputControlStatus` | `Default` | 验证状态(Default/Error/Warning) |
|
||
| `SizeType` | `SizeType` | `Middle` | 控件尺寸 |
|
||
| `IsMotionEnabled` | `bool` | 跟随全局 Token | 是否启用动画效果 |
|
||
|
||
### AddOn 装饰属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `LeftAddOn` | `object?` | `null` | 左侧外部附加内容 |
|
||
| `LeftAddOnTemplate` | `IDataTemplate?` | `null` | 左侧外部附加内容模板 |
|
||
| `RightAddOn` | `object?` | `null` | 右侧外部附加内容 |
|
||
| `RightAddOnTemplate` | `IDataTemplate?` | `null` | 右侧外部附加内容模板 |
|
||
| `ContentLeftAddOn` | `object?` | `null` | 左侧内部前缀内容(如文本 `"User"`) |
|
||
| `ContentLeftAddOnTemplate` | `IDataTemplate?` | `null` | 左侧内部前缀内容模板 |
|
||
| `ContentRightAddOn` | `object?` | `null` | 右侧内部后缀内容 |
|
||
| `ContentRightAddOnTemplate` | `IDataTemplate?` | `null` | 右侧内部后缀内容模板 |
|
||
|
||
### 空状态指示属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `EmptyIndicator` | `object?` | `null` | 空状态指示器内容 |
|
||
| `EmptyIndicatorTemplate` | `IDataTemplate?` | `null` | 空状态指示器模板 |
|
||
| `IsShowEmptyIndicator` | `bool` | `true` | 是否在选项为空时显示空状态指示器 |
|
||
| `EmptyIndicatorPadding` | `Thickness` | 默认值 | 空状态指示器内边距 |
|
||
|
||
### 只读属性
|
||
|
||
| 属性名 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `IsLoading` | `bool` | 是否正在异步加载选项(只读) |
|
||
|
||
---
|
||
|
||
## Select 公共属性
|
||
|
||
以下属性定义在 `Select` 类中(继承 `AbstractSelect`)。
|
||
|
||
### 核心属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `Mode` | `SelectMode` | `Single` | 选择模式:Single / Multiple / Tags |
|
||
| `OptionsSource` | `IEnumerable<ISelectOption>?` | `null` | 绑定的选项数据源 |
|
||
| `OptionTemplate` | `IDataTemplate?` | 默认显示 `Header` | 自定义选项渲染模板 |
|
||
| `OptionFontSize` | `double` | 由 Token 控制 | 选项字体大小 |
|
||
| `IsDefaultActiveFirstOption` | `bool` | `false` | 是否默认激活第一个选项 |
|
||
| `IsGroupEnabled` | `bool` | `false` | 是否启用选项分组 |
|
||
| `GroupPropertySelector` | `DefaultFilterValueSelector?` | `null` | 分组属性提取函数 |
|
||
| `IsHideSelectedOptions` | `bool` | `false` | 多选时是否隐藏已选选项 |
|
||
| `AutoScrollToSelectedOptions` | `bool` | `false` | 展开时是否自动滚动到已选选项 |
|
||
|
||
### 选中值属性
|
||
|
||
| 属性名 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `SelectedOption` | `ISelectOption?` | 单选模式下的已选选项(DirectProperty,支持双向绑定) |
|
||
| `SelectedOptions` | `IList<ISelectOption>?` | 多选/标签模式下的已选选项列表(DirectProperty) |
|
||
| `Options` | `ItemCollection` | 选项集合(`[Content]` 属性,支持 AXAML 直接声明子元素) |
|
||
|
||
### 搜索过滤属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `Filter` | `IValueFilter?` | `null` | 自定义过滤器实现 |
|
||
| `FilterValueSelector` | `DefaultFilterValueSelector?` | `HeaderFilterPropertySelector` | 过滤值提取函数 |
|
||
|
||
### 异步加载属性
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|---|---|---|---|
|
||
| `OptionsLoader` | `ISelectOptionsAsyncLoader?` | `null` | 异步选项加载器 |
|
||
| `OptionsAsyncLoadContext` | `object?` | `null` | 传递给加载器的上下文对象 |
|
||
|
||
### 默认值属性
|
||
|
||
| 属性名 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `DefaultValues` | `IList<object>?` | 默认选中值列表(通过 `Content` 值匹配) |
|
||
| `DefaultValueCompareFn` | `Func<object, ISelectOption, bool>?` | 自定义默认值比较函数 |
|
||
|
||
---
|
||
|
||
## 事件
|
||
|
||
### AbstractSelect 事件
|
||
|
||
| 事件名 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `DropDownOpening` | `EventHandler<CancelEventArgs>` | 下拉即将展开(可取消) |
|
||
| `DropDownOpened` | `EventHandler` | 下拉已展开 |
|
||
| `DropDownClosing` | `EventHandler<CancelEventArgs>` | 下拉即将关闭(可取消) |
|
||
| `DropDownClosed` | `EventHandler` | 下拉已关闭 |
|
||
|
||
### Select 事件
|
||
|
||
| 事件名 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `SelectionChanged` | `EventHandler<SelectSelectionChangedEventArgs>` | 选中值变更 |
|
||
| `OptionsLoading` | `EventHandler<SelectOptionsLoadingEventArgs>` | 异步加载开始(可取消) |
|
||
| `OptionsLoaded` | `EventHandler<SelectOptionsLoadedEventArgs>` | 异步加载完成 |
|
||
|
||
---
|
||
|
||
## 公共方法
|
||
|
||
| 方法名 | 返回值 | 说明 |
|
||
|---|---|---|
|
||
| `ClearValue()` | `void` | 清空所有已选值(`SelectedOption` 和 `SelectedOptions`) |
|
||
|
||
---
|
||
|
||
## 伪类(Pseudo-Classes)
|
||
|
||
| 伪类 | 常量 | 触发条件 |
|
||
|---|---|---|
|
||
| `:dropdownopen` | `SelectPseudoClass.DropdownOpen` | 下拉面板处于打开状态 |
|
||
| `:error` | `StdPseudoClass.Error` | `Status == InputControlStatus.Error` |
|
||
| `:warning` | `StdPseudoClass.Warning` | `Status == InputControlStatus.Warning` |
|
||
| `:outline` | `AddOnDecoratedBoxPseudoClass.Outline` | `StyleVariant == Outline` |
|
||
| `:filled` | `AddOnDecoratedBoxPseudoClass.Filled` | `StyleVariant == Filled` |
|
||
| `:borderless` | `AddOnDecoratedBoxPseudoClass.Borderless` | `StyleVariant == Borderless` |
|
||
|
||
### 继承的标准伪类
|
||
|
||
| 伪类 | 触发条件 |
|
||
|---|---|
|
||
| `:pointerover` | 鼠标悬浮 |
|
||
| `:pressed` | 控件按下 |
|
||
| `:disabled` | `IsEnabled == false` |
|
||
| `:focus` | 获得焦点 |
|
||
|
||
---
|
||
|
||
## 实现的接口
|
||
|
||
### ISizeTypeAware
|
||
|
||
```csharp
|
||
public SizeType SizeType { get; set; }
|
||
```
|
||
|
||
### IMotionAwareControl
|
||
|
||
```csharp
|
||
public bool IsMotionEnabled { get; set; }
|
||
```
|
||
|
||
### IInputControlStatusAware
|
||
|
||
```csharp
|
||
public InputControlStatus Status { get; set; }
|
||
```
|
||
|
||
### IInputControlStyleVariantAware
|
||
|
||
```csharp
|
||
public InputControlStyleVariant StyleVariant { get; set; }
|
||
```
|
||
|
||
### ICompactSpaceAware
|
||
|
||
在 `Space.Compact` 容器中使用时自动调整圆角和边框。根据在紧凑空间中的位置自动裁剪圆角。
|
||
|
||
### IFormItemAware
|
||
|
||
可作为 `FormItem` 的子控件参与表单验证流程。支持 `SetFormValue` / `GetFormValue` / `ClearFormValue` / `NotifyValidateStatus`。
|
||
|
||
### IFormItemFeedbackAware
|
||
|
||
接收表单验证反馈控件(如错误图标、警告图标),并在 `SelectHandle` 区域展示。
|
||
|
||
---
|
||
|
||
## 静态字段
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `HeaderFilterPropertySelector` | `DefaultFilterValueSelector` | 按 `Header` 属性过滤的默认提取函数 |
|
||
| `ValueFilterPropertySelector` | `DefaultFilterValueSelector` | 按 `Content` 属性过滤的提取函数 |
|