Files

251 lines
7.4 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.
# Message API 参考
## 命名空间
```csharp
namespace AtomUI.Desktop.Controls;
```
AXAML 命名空间前缀:`atom`(`xmlns:atom="https://atomui.net"`)
---
## 枚举类型
### MessageType
消息类型枚举,定义消息的语义和默认图标。
| 值 | 说明 |
|---|---|
| `Information` | 信息提示(默认),蓝色 `InfoCircleFilled` 图标 |
| `Success` | 成功提示,绿色 `CheckCircleFilled` 图标 |
| `Warning` | 警告提示,黄色 `ExclamationCircleFilled` 图标 |
| `Error` | 错误提示,红色 `CloseCircleFilled` 图标 |
| `Loading` | 加载中提示,蓝色旋转 `LoadingOutlined` 图标 |
### NotificationPosition(来自 `AtomUI.Desktop.Controls`)
消息位置枚举,用于 `WindowMessageManager.Position`。
| 值 | 说明 |
|---|---|
| `TopLeft` | 左上角 |
| `TopRight` | 右上角(默认) |
| `BottomLeft` | 左下角 |
| `BottomRight` | 右下角 |
| `TopCenter` | 顶部居中 |
| `BottomCenter` | 底部居中 |
---
## IMessage 接口
消息数据契约接口,定义了全局提示消息所需的基本信息。
```csharp
public interface IMessage
{
string Content { get; }
PathIcon? Icon { get; }
MessageType Type { get; }
TimeSpan Expiration { get; }
Action? OnClose { get; }
}
```
| 属性 | 类型 | 说明 |
|---|---|---|
| `Content` | `string` | 消息文本内容 |
| `Icon` | `PathIcon?` | 自定义图标,为 `null` 时使用 `Type` 对应的默认图标 |
| `Type` | `MessageType` | 消息类型 |
| `Expiration` | `TimeSpan` | 自动关闭时间,`TimeSpan.Zero` 表示不自动关闭 |
| `OnClose` | `Action?` | 消息关闭回调 |
---
## Message 类(数据模型)
`Message` 是 `IMessage` 的默认实现,同时实现了 `INotifyPropertyChanged`,支持 `Content` 和 `Icon` 的动态更新。
### 构造函数
```csharp
public Message(
string content,
MessageType type = MessageType.Information,
PathIcon? icon = null,
TimeSpan? expiration = null,
Action? onClose = null)
```
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `content` | `string` | — | 消息文本内容(必填) |
| `type` | `MessageType` | `MessageType.Information` | 消息类型 |
| `icon` | `PathIcon?` | `null` | 自定义图标,为 `null` 时使用默认图标 |
| `expiration` | `TimeSpan?` | `null`(实际 5 秒) | 自动关闭时间 |
| `onClose` | `Action?` | `null` | 消息关闭时执行的回调 |
### 属性
| 属性名 | 类型 | 默认值 | 可写 | 说明 |
|---|---|---|---|---|
| `Content` | `string` | 构造函数传入 | ✅ | 消息文本,修改后触发 `PropertyChanged` |
| `Icon` | `PathIcon?` | `null` | ✅ | 自定义图标,修改后触发 `PropertyChanged` |
| `Type` | `MessageType` | `MessageType.Information` | ✅ | 消息类型 |
| `Expiration` | `TimeSpan` | `TimeSpan.FromSeconds(5)` | ✅ | 自动关闭时间 |
| `OnClose` | `Action?` | `null` | ✅ | 关闭回调 |
### 事件
| 事件名 | 类型 | 说明 |
|---|---|---|
| `PropertyChanged` | `PropertyChangedEventHandler` | 属性变更通知(`Content`、`Icon` 变更时触发) |
---
## IMessageManager 接口
消息管理器契约接口。
```csharp
public interface IMessageManager
{
void Show(IMessage message, string[]? classes = null);
}
```
| 方法 | 参数 | 说明 |
|---|---|---|
| `Show` | `message`: 消息数据; `classes`: 可选样式类名数组 | 显示一条全局提示消息 |
---
## MessageCard 类(视觉控件)
`MessageCard` 是单条消息的视觉呈现控件,继承自 `TemplatedControl`。
### 公共属性(StyledProperty)
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `MessageType` | `MessageType` | `MessageType.Information` | 消息类型,控制图标和颜色 |
| `Message` | `string` | `""` | 消息文本内容 |
| `Icon` | `PathIcon?` | `null` | 消息图标,为 `null` 时根据 `MessageType` 自动设置默认图标 |
| `IsClosed` | `bool` | `false` | 消息是否已关闭 |
| `IsMotionEnabled` | `bool` | 跟随全局 Token `EnableMotion` | 是否启用入场/出场动画(共享属性) |
### 只读属性(DirectProperty)
| 属性名 | 类型 | 说明 |
|---|---|---|
| `IsClosing` | `bool` | 消息是否正在关闭中(出场动画播放期间为 `true`) |
### 内部属性
| 属性名 | 类型 | 说明 |
|---|---|---|
| `OpenCloseMotionDuration` | `TimeSpan` | 入场/出场动画时长(由主题设置,默认为 `SharedToken.MotionDurationMid`) |
### 公共方法
| 方法 | 签名 | 说明 |
|---|---|---|
| `Close()` | `void Close()` | 触发消息关闭流程(播放出场动画后关闭) |
### 事件
| 事件名 | 类型 | 说明 |
|---|---|---|
| `MessageClosed` | `EventHandler<RoutedEventArgs>` | 消息关闭完成后触发的路由事件(Bubble 路由策略) |
### 伪类(Pseudo-Classes)
MessageCard 支持以下伪类,可在样式选择器中使用:
| 伪类 | 常量 | 触发条件 |
|---|---|---|
| `:information` | `MessageCardPseudoClass.Information` | `MessageType == Information` |
| `:success` | `MessageCardPseudoClass.Success` | `MessageType == Success` |
| `:warning` | `MessageCardPseudoClass.Warning` | `MessageType == Warning` |
| `:error` | `MessageCardPseudoClass.Error` | `MessageType == Error` |
| `:loading` | `MessageCardPseudoClass.Loading` | `MessageType == Loading` |
---
## WindowMessageManager 类(容器管理器)
`WindowMessageManager` 是全局消息容器,挂载在 `TopLevel` 的 `AdornerLayer` 上,管理消息的显示和生命周期。
### 构造函数
```csharp
public WindowMessageManager(TopLevel? host)
```
| 参数 | 类型 | 说明 |
|---|---|---|
| `host` | `TopLevel?` | 承载消息的顶层窗口。传入后自动挂载到该窗口的 AdornerLayer |
### 公共属性(StyledProperty)
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `Position` | `NotificationPosition` | `NotificationPosition.TopRight` | 消息显示位置 |
| `MaxItems` | `int` | `5` | 同时可见的最大消息数量 |
| `IsMotionEnabled` | `bool` | 跟随全局 Token `EnableMotion` | 是否启用动画(传递给子 MessageCard) |
### 公共方法
| 方法 | 签名 | 说明 |
|---|---|---|
| `Show` | `void Show(IMessage message, string[]? classes = null)` | 显示一条消息,可附加样式类 |
| `Dispose` | `void Dispose()` | 释放资源,从 AdornerLayer 卸载,清理事件订阅 |
### 实现的接口
| 接口 | 作用 |
|---|---|
| `IMessageManager` | 消息管理器契约,提供 `Show` 方法 |
| `IMotionAwareControl` | 动画控制,`IsMotionEnabled` 属性传递给子 MessageCard |
| `IDisposable` | 资源释放,卸载时清理 AdornerLayer 引用和事件订阅 |
---
## 常量
### MessageCardPseudoClass
```csharp
public static class MessageCardPseudoClass
{
public const string Error = ":error";
public const string Information = ":information";
public const string Success = ":success";
public const string Warning = ":warning";
public const string Loading = ":loading";
}
```
### MessageCardThemeConstants(内部)
```csharp
internal class MessageCardThemeConstants
{
public const string FramePart = "PART_Frame";
public const string IconContentPart = "PART_IconContent";
public const string HeaderContainerPart = "PART_HeaderContainer";
public const string MessagePart = "PART_Message";
}
```
### WindowMessageManagerThemeConstants(内部)
```csharp
internal class WindowMessageManagerThemeConstants
{
public const string ItemsPart = "PART_Items";
}
```