Files

259 lines
8.3 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.
# TabControl API 参考
## 命名空间
```csharp
namespace AtomUI.Desktop.Controls;
```
AXAML 命名空间前缀:`atom`(`xmlns:atom="https://atomui.net"`)
---
## 枚举类型
### SizeType(来自 `AtomUI.Controls`)
| 值 | 说明 |
|---|---|
| `Small` | 小号标签页 |
| `Middle` | 中号标签页(默认) |
| `Large` | 大号标签页 |
### TabSharp
标签形状枚举(内部使用,由控件类型自动设置)。
| 值 | 说明 |
|---|---|
| `Line` | 线条式 |
| `Card` | 卡片式 |
---
## BaseTabControl 公共属性
`BaseTabControl` 是 `TabControl` 和 `CardTabControl` 的共享基类,以下属性对两者均有效。
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `TabStripPlacement` | `Dock` | `Dock.Top` | 标签栏位置(Top/Right/Bottom/Left) |
| `SizeType` | `SizeType` | `SizeType.Middle` | 标签尺寸(共享属性) |
| `TabAlignmentCenter` | `bool` | `false` | 标签是否居中对齐 |
| `IsTabClosable` | `bool` | `false` | 是否全局启用标签关闭按钮 |
| `IsTabAutoHideCloseButton` | `bool` | `false` | 关闭按钮是否仅悬浮时显示 |
| `HeaderStartExtraContent` | `object?` | `null` | 标签栏起始端额外内容 |
| `HeaderStartExtraContentTemplate` | `IDataTemplate?` | `null` | 起始端额外内容模板 |
| `HeaderEndExtraContent` | `object?` | `null` | 标签栏末端额外内容 |
| `HeaderEndExtraContentTemplate` | `IDataTemplate?` | `null` | 末端额外内容模板 |
| `ContentTemplate` | `IDataTemplate?` | `null` | 内容面板模板 |
| `ContentPadding` | `Thickness` | 由 Token 控制 | 内容区域内间距 |
| `TabAndContentGutter` | `double` | 由 Token 控制 | 标签栏与内容区域间距 |
| `HeaderStartEdgePadding` | `double` | `0` | 标签栏起始端边距 |
| `HeaderEndEdgePadding` | `double` | `0` | 标签栏末端边距 |
| `IsMotionEnabled` | `bool` | 跟随全局 Token | 是否启用过渡动画 |
| `HorizontalContentAlignment` | `HorizontalAlignment` | `Stretch` | 内容水平对齐 |
| `VerticalContentAlignment` | `VerticalAlignment` | `Stretch` | 内容垂直对齐 |
| `SelectedContent` | `object?` | — (只读) | 当前选中标签的内容 |
| `SelectedContentTemplate` | `IDataTemplate?` | — (只读) | 当前选中标签的内容模板 |
### 继承自 SelectingItemsControl 的常用属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `SelectedIndex` | `int` | `0` | 当前选中标签索引 |
| `SelectedItem` | `object?` | — | 当前选中项 |
| `ItemsSource` | `IEnumerable?` | `null` | 数据绑定源 |
| `ItemTemplate` | `IDataTemplate?` | `null` | 数据项模板 |
---
## CardTabControl 附加属性
`CardTabControl` 在 `BaseTabControl` 基础上增加:
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `IsShowAddTabButton` | `bool` | `false` | 是否显示添加标签按钮 |
---
## BaseTabStrip 公共属性
`BaseTabStrip` 是 `TabStrip` 和 `CardTabStrip` 的共享基类。属性与 `BaseTabControl` 高度一致,但无内容面板相关属性。
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `TabStripPlacement` | `Dock` | `Dock.Top` | 标签栏位置 |
| `SizeType` | `SizeType` | `SizeType.Middle` | 标签尺寸 |
| `TabAlignmentCenter` | `bool` | `false` | 标签是否居中对齐 |
| `IsTabClosable` | `bool` | `false` | 是否全局启用标签关闭按钮 |
| `IsTabAutoHideCloseButton` | `bool` | `false` | 关闭按钮是否仅悬浮时显示 |
| `HeaderStartExtraContent` | `object?` | `null` | 标签栏起始端额外内容 |
| `HeaderStartExtraContentTemplate` | `IDataTemplate?` | `null` | 起始端额外内容模板 |
| `HeaderEndExtraContent` | `object?` | `null` | 标签栏末端额外内容 |
| `HeaderEndExtraContentTemplate` | `IDataTemplate?` | `null` | 末端额外内容模板 |
| `HeaderStartEdgePadding` | `double` | `0` | 标签栏起始端边距 |
| `HeaderEndEdgePadding` | `double` | `0` | 标签栏末端边距 |
| `IsMotionEnabled` | `bool` | 跟随全局 Token | 是否启用过渡动画 |
### CardTabStrip 附加属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `IsShowAddTabButton` | `bool` | `false` | 是否显示添加标签按钮 |
---
## TabItem 公共属性
`TabItem` 用于 `TabControl` / `CardTabControl` 中的标签项。
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `Header` | `object?` | `null` | 标签标题(继承自 `HeaderedContentControl`) |
| `HeaderTemplate` | `IDataTemplate?` | `null` | 标题模板 |
| `Content` | `object?` | `null` | 标签面板内容 |
| `ContentTemplate` | `IDataTemplate?` | `null` | 面板内容模板 |
| `Icon` | `PathIcon?` | `null` | 标签图标 |
| `CloseIcon` | `PathIcon?` | `CloseOutlined` | 关闭按钮图标 |
| `IsClosable` | `bool` | `false` | 该标签是否可关闭 |
| `IsAutoHideCloseButton` | `bool` | `false` | 关闭按钮是否自动隐藏 |
| `IsSelected` | `bool` | `false` | 是否选中 |
| `IsEnabled` | `bool` | `true` | 是否启用 |
| `TabStripPlacement` | `Dock?` | — (只读) | 标签栏位置(由父容器传递) |
---
## TabStripItem 公共属性
`TabStripItem` 用于 `TabStrip` / `CardTabStrip` 中的标签项。
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `Content` | `object?` | `null` | 标签文本内容(继承自 `ContentControl`) |
| `Icon` | `PathIcon?` | `null` | 标签图标 |
| `CloseIcon` | `PathIcon?` | `CloseOutlined` | 关闭按钮图标 |
| `IsClosable` | `bool` | `false` | 该标签是否可关闭 |
| `IsAutoHideCloseButton` | `bool` | `false` | 关闭按钮是否自动隐藏 |
| `IsEnabled` | `bool` | `true` | 是否启用 |
| `TabStripPlacement` | `Dock?` | — (只读) | 标签栏位置(由父容器传递) |
---
## ITabItemData 接口
用于 `ItemsSource` 数据绑定场景,自动映射属性到 TabItem / TabStripItem。
```csharp
public interface ITabItemData : IHeadered
{
PathIcon? Icon { get; }
PathIcon? CloseIcon { get; }
bool IsEnabled { get; }
bool IsClosable { get; }
bool IsAutoHideCloseButton { get; }
}
```
`TabItemData` 是其默认实现,所有属性为 `init` 属性。
---
## 事件
### BaseTabControl / BaseTabStrip 事件
| 事件名 | 类型 | 说明 |
|---|---|---|
| `Closing` | `EventHandler<TabClosingEventArgs>` | 标签关闭前触发,可设置 `Cancel = true` 阻止关闭 |
| `Closed` | `EventHandler<TabClosedEventArgs>` | 标签成功关闭后触发 |
| `SelectionChanged` | `EventHandler<SelectionChangedEventArgs>` | 选中标签变更时触发(继承自 `SelectingItemsControl`) |
### CardTabControl / CardTabStrip 事件
| 事件名 | 类型 | 说明 |
|---|---|---|
| `AddTabRequest` | `EventHandler<RoutedEventArgs>` | 点击添加按钮时触发 |
### TabClosingEventArgs
| 属性 | 类型 | 说明 |
|---|---|---|
| `TabItem` | `TabItem` | 即将被关闭的标签项 |
| `Cancel` | `bool` | 设置为 `true` 阻止关闭 |
### TabClosedEventArgs
| 属性 | 类型 | 说明 |
|---|---|---|
| `TabItem` | `TabItem` | 已关闭的标签项 |
---
## 公共方法
### BaseTabControl.CloseTab
```csharp
public bool CloseTab(TabItem tabItem)
```
以编程方式关闭指定标签。触发 `Closing` / `Closed` 事件流。返回 `true` 表示成功关闭。
### BaseTabStrip.CloseTab
```csharp
public bool CloseTab(TabStripItem tabStripItem)
```
同上,用于 TabStrip 系列。
---
## 伪类(Pseudo-Classes)
### BaseTabControl / BaseTabStrip 伪类
| 伪类 | 常量 | 触发条件 |
|---|---|---|
| `:top` | `TabPseudoClass.Top` | `TabStripPlacement == Dock.Top` |
| `:right` | `TabPseudoClass.Right` | `TabStripPlacement == Dock.Right` |
| `:bottom` | `TabPseudoClass.Bottom` | `TabStripPlacement == Dock.Bottom` |
| `:left` | `TabPseudoClass.Left` | `TabStripPlacement == Dock.Left` |
### TabItem / TabStripItem 伪类
| 伪类 | 触发条件 |
|---|---|
| `:selected` | 该标签被选中 |
| `:pressed` | 鼠标按下 |
| `:pointerover` | 鼠标悬浮 |
| `:disabled` | `IsEnabled == false` |
---
## 实现的接口
### IMotionAwareControl(BaseTabControl / BaseTabStrip)
```csharp
public bool IsMotionEnabled { get; set; }
```
### ISizeTypeAware(BaseTabStrip)
```csharp
public SizeType SizeType { get; set; }
```
---
## 键盘交互
| 按键 | 行为 |
|---|---|
| `←` / `→` | 水平布局时切换标签 |
| `↑` / `↓` | 垂直布局时切换标签 |
| `Tab` | 焦点在标签间导航 |