信息发布→ 登录 注册 退出

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

发布时间:2026-01-10

点击量:
Avalonia 中操作剪贴板需通过 TopLevel.GetTopLevel(this)?.Clipboard 获取 IClipboard? 实例并判空;支持异步文本复制/粘贴、文件路径拖放(需转 IStorageFile[])、自定义格式二进制数据(推荐 JSON/MessagePack 序列化)。

在 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.JsonMessagePack 序列化后转 byte[]
  • 写入:dataObject.SetData("myapp/json-data", jsonDataBytes)
  • 读取:var bytes = await dataObject.TryGetValueAsync("myapp/json-data")
  • 自定义格式名建议带命名空间前缀(如 "com.example.user-info"),避免冲突
标签:# 命名空间  # 本机  # 能为  # 如需  # 文件列表  # 均为  # 二进制数  # 这是  # 序列化  # 拖放  # 自定义  # 异步  # this  # 对象  # var  # 接口  # linux  # NULL  # String  # cos  # c#  # win  # 资源管理器  # macos  # ai  # mac  # app  # 编码  # windows  # json  # js  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!