C# Avalonia怎么操作剪贴板 Avalonia Clipboard用法

来源:这里教程网 时间:2026-02-21 17:37:28 作者:

在 Avalonia 中操作剪贴板,核心是使用

IClipboard
接口,它屏蔽了 Windows/macOS/Linux 底层差异,提供统一、跨平台的异步 API。与 WinForms 的
System.Windows.Forms.Clipboard
不同,Avalonia 的剪贴板必须通过当前 TopLevel(如 Window)获取,且所有操作均为异步。

获取剪贴板实例

不能直接 new 或静态调用,需从窗口上下文提取:

TopLevel.GetTopLevel(this)?.Clipboard
是最常用方式,
this
需为控件(如 Button、TextBox)
若在 ViewModel 中使用,建议通过依赖注入或传入
IWindowingPlatform
获取 TopLevel,再取 Clipboard
返回值为
IClipboard?
,务必判空,尤其在未附加到可视化树时可能为 null

文本复制与粘贴

这是最常见场景,API 简洁直观:

复制:
await clipboard.SetTextAsync("Hello")
粘贴:
string? text = await clipboard.GetTextAsync()
支持 UTF-8、换行符等,无需额外编码处理 若需响应粘贴失败(如剪贴板为空或非文本),可配合
ContainsTextAsync()
预检

文件拖放与文件列表复制

Avalonia 支持将本地文件路径写入剪贴板,供其他应用(如资源管理器)识别为“文件拖放”源:

需构造
DataObject
,并用
DataFormats.Files
格式设置
路径需先转为
IStorageFile
列表(通过
StorageProvider.TryGetFileFromPathAsync
示例:复制三个路径 → 转为
IStorageFile[]
dataObject.SetData(DataFormats.Files, files)
clipboard.SetDataObjectAsync(dataObject)
注意:仅支持本机绝对路径;相对路径或网络路径无效

自定义格式与二进制数据

如需存取图像、序列化对象等,应避免使用已弃用的

BinaryFormatter
(.NET 8+ 默认禁用):

推荐用
System.Text.Json
MessagePack
序列化后转
byte[]
写入:
dataObject.SetData("myapp/json-data", jsonDataBytes)
读取:
var bytes = await dataObject.TryGetValueAsync("myapp/json-data")
自定义格式名建议带命名空间前缀(如
"com.example.user-info"
),避免冲突

相关推荐