Files

188 lines
6.2 KiB
Markdown
Raw Permalink 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.
# Collapse API 参考
## 命名空间
```csharp
namespace AtomUI.Desktop.Controls;
```
AXAML 命名空间前缀:`atom`(`xmlns:atom="https://atomui.net"`)
---
## 枚举类型
### CollapseTriggerType
折叠触发方式枚举,定义用户通过哪种操作触发面板的折叠/展开。
| 值 | 说明 |
|---|---|
| `Header` | 点击整个头部区域触发折叠(默认) |
| `Icon` | 仅点击展开图标触发折叠 |
### CollapseExpandIconPosition
展开图标位置枚举。
| 值 | 说明 |
|---|---|
| `Start` | 展开图标在左侧(默认) |
| `End` | 展开图标在右侧 |
### SizeType(来自 `AtomUI.Controls`)
尺寸类型枚举。
| 值 | 说明 |
|---|---|
| `Small` | 小号 |
| `Middle` | 中号(默认) |
| `Large` | 大号 |
---
## Collapse 公共属性(StyledProperty)
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `SizeType` | `SizeType` | `SizeType.Middle` | 面板尺寸(共享属性,通过 `AddOwner` 注册) |
| `IsGhostStyle` | `bool` | `false` | 幽灵模式,无边框无背景 |
| `IsBorderless` | `bool` | `false` | 无边框模式,去除外边框 |
| `IsAccordion` | `bool` | `false` | 手风琴模式,同时只展开一个面板 |
| `TriggerType` | `CollapseTriggerType` | `Header` | 折叠触发区域 |
| `ExpandIconPosition` | `CollapseExpandIconPosition` | `Start` | 展开图标位置 |
| `IsMotionEnabled` | `bool` | 跟随全局 Token | 是否启用折叠/展开动画(共享属性) |
| `ItemHeaderPadding` | `Thickness?` | `null`(由 Token 控制) | 统一设置所有子项的头部内间距 |
| `ItemContentPadding` | `Thickness?` | `null`(由 Token 控制) | 统一设置所有子项的内容内间距 |
### 继承自 Avalonia SelectingItemsControl 的常用属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `ItemsSource` | `IEnumerable?` | `null` | 数据源绑定 |
| `ItemTemplate` | `IDataTemplate?` | `null` | 子项内容模板 |
| `ItemsPanel` | `ITemplate<Panel?>` | 垂直 `StackPanel` | 子项布局面板 |
| `SelectedIndex` | `int` | `-1` | 当前选中项索引 |
| `SelectedItem` | `object?` | `null` | 当前选中项对象 |
| `SelectedItems` | `IList?` | — | 多选模式下的选中项集合 |
| `SelectionMode` | `SelectionMode` | `Multiple \| Toggle` | 选择模式(手风琴时自动切换为 `Single \| Toggle`) |
| `IsEnabled` | `bool` | `true` | 是否启用 |
| `BorderThickness` | `Thickness` | 由 Token 控制 | 边框粗细 |
| `BorderBrush` | `IBrush?` | 由主题控制 | 边框颜色 |
| `CornerRadius` | `CornerRadius` | 由 Token 控制 | 圆角半径 |
---
## CollapseItem 公共属性(StyledProperty)
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `IsSelected` | `bool` | `false` | 是否展开(通过 `AddOwner` 注册自 `SelectingItemsControl.IsSelectedProperty`) |
| `IsShowExpandIcon` | `bool` | `true` | 是否显示展开图标 |
| `ExpandIcon` | `PathIcon?` | `RightOutlined` | 自定义展开图标 |
| `AddOnContent` | `object?` | `null` | 头部附加内容(如操作按钮、图标) |
| `AddOnContentTemplate` | `IDataTemplate?` | `null` | 附加内容模板 |
| `HeaderPadding` | `Thickness?` | `null`(由父级 Collapse 或 Token 控制) | 自定义头部内间距 |
| `ContentPadding` | `Thickness?` | `null`(由父级 Collapse 或 Token 控制) | 自定义内容内间距 |
### 继承自 Avalonia HeaderedContentControl 的常用属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `Header` | `object?` | `null` | 面板标题 |
| `HeaderTemplate` | `IDataTemplate?` | `null` | 标题模板 |
| `Content` | `object?` | `null` | 面板内容 |
| `ContentTemplate` | `IDataTemplate?` | `null` | 内容模板 |
| `IsEnabled` | `bool` | `true` | 是否启用(禁用时面板无法折叠/展开) |
---
## 数据接口
### ICollapseItemData
用于数据驱动模式(`ItemsSource` 绑定)时,自动映射数据属性到 CollapseItem。
```csharp
public interface ICollapseItemData
{
bool IsSelected { get; }
bool IsEnabled { get; }
bool IsShowExpandIcon { get; }
object? Header { get; }
}
```
| 属性名 | 类型 | 说明 |
|---|---|---|
| `IsSelected` | `bool` | 面板是否默认展开 |
| `IsEnabled` | `bool` | 面板是否可交互 |
| `IsShowExpandIcon` | `bool` | 是否显示展开图标 |
| `Header` | `object?` | 面板标题 |
### CollapseItemData(record)
`ICollapseItemData` 的默认实现:
```csharp
public record CollapseItemData : ICollapseItemData
{
public bool IsSelected { get; init; } = false;
public bool IsEnabled { get; init; } = true;
public bool IsShowExpandIcon { get; init; } = true;
public object? Header { get; init; }
}
```
---
## 事件
| 事件名 | 控件 | 类型 | 说明 |
|---|---|---|---|
| `SelectionChanged` | Collapse | `EventHandler<SelectionChangedEventArgs>` | 面板选中状态变化事件(继承自 `SelectingItemsControl`) |
---
## 伪类(Pseudo-Classes)
### CollapseItem 伪类
| 伪类 | 常量 | 触发条件 |
|---|---|---|
| `:selected` | `StdPseudoClass.Selected` | 面板展开(`IsSelected == true`) |
| `:pressed` | `StdPseudoClass.Pressed` | 面板被按下 |
| `:custom-header-padding` | `CollapseItemPseudoClass.CustomHeaderPadding` | `HeaderPadding != null`(自定义头部间距) |
| `:custom-content-padding` | `CollapseItemPseudoClass.CustomContentPadding` | `ContentPadding != null`(自定义内容间距) |
### 继承的标准伪类
| 伪类 | 触发条件 |
|---|---|
| `:disabled` | `IsEnabled == false` |
| `:focus` | 获得焦点 |
| `:pointerover` | 鼠标悬浮 |
> 注意:`:custom-header-padding` 和 `:custom-content-padding` 伪类用于样式系统内部判断——当设置了自定义间距时,Token 定义的默认间距不再生效。
---
## 实现的接口
### IMotionAwareControl(Collapse)
```csharp
public bool IsMotionEnabled { get; set; }
```
控制折叠/展开动画是否启用。设为 `false` 时,面板展开/折叠直接切换,无过渡动画。
### ISelectable(CollapseItem)
```csharp
public bool IsSelected { get; set; }
```
面板的展开/折叠状态。`true` = 展开,`false` = 折叠。由父级 `Collapse` 的选择机制管理,也可在 AXAML 中直接设置默认值。