Files

132 lines
4.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.
# Segmented API 参考
## 命名空间
```csharp
namespace AtomUI.Desktop.Controls; // Segmented, SegmentedItem
namespace AtomUI.Controls.Commons; // AbstractSegmented, AbstractSegmentedItem
```
AXAML 命名空间前缀:`atom`(`xmlns:atom="https://atomui.net"`)
---
## 枚举类型
### SizeType(来自 `AtomUI.Controls`)
尺寸类型枚举。
| 值 | 说明 |
|---|---|
| `Small` | 小号(高度约 24px) |
| `Middle` | 中号(默认,高度约 32px) |
| `Large` | 大号(高度约 40px) |
---
## Segmented
### 公共属性(StyledProperty)
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `SizeType` | `SizeType` | `SizeType.Middle` | 尺寸类型,影响容器圆角、选项高度和字体大小(共享属性,通过 `AddOwner` 注册) |
| `IsExpanding` | `bool` | `false` | Block 模式:为 `true` 时容器撑满父元素宽度,选项均分 |
| `IsMotionEnabled` | `bool` | 跟随全局 Token `EnableMotion` | 是否启用过渡动画(色块滑动、选项背景色过渡) |
### 继承自 Avalonia.Controls.SelectingItemsControl 的常用属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `Items` | `ItemCollection` | — | 子项集合(可添加 `SegmentedItem` 或数据对象) |
| `ItemsSource` | `IEnumerable?` | `null` | 数据绑定源 |
| `ItemTemplate` | `IDataTemplate?` | 内置 `TextBlock` 模板 | 数据项的展示模板 |
| `SelectedIndex` | `int` | `0` | 当前选中项索引(默认选中第一项) |
| `SelectedItem` | `object?` | — | 当前选中的数据对象 |
| `Background` | `IBrush?` | `TrackBg` Token | 容器背景色(轨道背景色) |
| `Padding` | `Thickness` | `TrackPadding` Token | 容器内间距 |
| `CornerRadius` | `CornerRadius` | 由 SizeType 决定 | 容器圆角 |
| `HorizontalAlignment` | `HorizontalAlignment` | `Left`(Block 模式为 `Stretch`) | 水平对齐方式 |
| `VerticalAlignment` | `VerticalAlignment` | `Top` | 垂直对齐方式 |
---
## SegmentedItem
### 公共属性(StyledProperty)
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `IsSelected` | `bool` | `false` | 是否被选中(通过 `SelectingItemsControl.IsSelectedProperty.AddOwner` 注册) |
| `Icon` | `PathIcon?` | `null` | 选项图标,使用 Ant Design 图标集 |
### 继承自 Avalonia.Controls.ContentControl 的常用属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `Content` | `object?` | `null` | 选项文本内容 |
| `ContentTemplate` | `IDataTemplate?` | `null` | 内容模板 |
| `IsEnabled` | `bool` | `true` | 是否启用(可单独禁用某些选项) |
| `Foreground` | `IBrush?` | 由 Token 和状态控制 | 文本颜色 |
| `Background` | `IBrush?` | 由 Token 和状态控制 | 选项背景色 |
| `CornerRadius` | `CornerRadius` | 由 SizeType 决定 | 选项圆角 |
| `Padding` | `Thickness` | 由 SizeType 决定 | 选项内间距 |
| `FontSize` | `double` | 由 SizeType 决定 | 字体大小 |
| `MinHeight` | `double` | 由 SizeType 决定 | 最小高度 |
| `Cursor` | `Cursor` | `Hand`(启用时) | 鼠标光标 |
---
## 事件
| 事件名 | 类型 | 说明 |
|---|---|---|
| `SelectionChanged` | `EventHandler<SelectionChangedEventArgs>` | 选中项变化事件(继承自 `SelectingItemsControl`) |
---
## 伪类(Pseudo-Classes)
### SegmentedItem 伪类
| 伪类 | 常量 | 触发条件 |
|---|---|---|
| `:selected` | `StdPseudoClass.Selected` | `IsSelected == true` |
| `:pressed` | `StdPseudoClass.Pressed` | 鼠标按下(通过 PressedMixin) |
| `:has-icon` | `SegmentedPseudoClass.HasIcon` | `Icon != null` |
| `:disabled` | — | `IsEnabled == false` |
| `:pointerover` | — | 鼠标悬浮 |
---
## 实现的接口
### ISizeTypeAware
```csharp
public SizeType SizeType { get; set; }
```
支持三种尺寸(Small / Middle / Large)切换,影响容器和选项的圆角、高度、字号和间距。
### IMotionAwareControl
```csharp
public bool IsMotionEnabled { get; set; }
```
控制色块滑动动画和选项背景色过渡是否启用。
### IFormItemAware
可作为 `FormItem` 的子控件参与表单验证。Segmented 通过 `SelectedItem` 作为表单值。
### ISelectable(SegmentedItem)
```csharp
public bool IsSelected { get; set; }
```
参与 `SelectingItemsControl` 的选择管理逻辑。