复制和粘贴是用户在应用或应用中交换数据的基本方法。 本文介绍如何使用剪贴板 API 在 WinUI 和通用 Windows 平台(UWP)应用中实现复制和粘贴。 你将了解如何复制、剪切和粘贴数据、跟踪剪贴板更改,以及如何使用 DataPackage 类处理不同的数据格式。
注释
还可以通过 Windows 运行时 (WinRT) API 在其他桌面应用中使用这些 API。 有关详细信息,请参阅 在桌面应用中调用 Windows 运行时 API。
有关演示不同复制和粘贴方案的完整代码示例,请参阅 GitHub 上的 UWP 剪贴板示例。
检查内置剪贴板支持
在许多情况下,您不需要编写代码来支持剪贴板操作。 许多可用于创建应用的默认 XAML 控件已经支持剪贴板作。
开始设置
首先,在应用中包括 Windows.ApplicationModel.DataTransfer 命名空间。 然后,添加 DataPackage 对象的实例。 此对象包含用户要复制的数据以及要包含的任何属性(如说明)。
复制和剪切
复制和剪切(也称为 移动)几乎完全相同。 使用 RequestedOperation 属性选择所需的操作。
// copy
dataPackage.RequestedOperation = DataPackageOperation.Copy;
// or cut
dataPackage.RequestedOperation = DataPackageOperation.Move;
设置复制的内容
接下来,可以添加用户已选择的数据到 DataPackage 对象。 如果 DataPackage 类支持此数据,则可以使用 DataPackage 对象的相应方法之一。 下面介绍如何使用 SetText 方法添加文本:
最后一步是通过调用静态 SetContent 方法将 DataPackage 添加到剪贴板。
粘贴
若要获取剪贴板的内容,请调用静态 GetContent 方法。 此方法返回包含内容的 DataPackageView 。 此对象与 DataPackage 对象几乎完全相同,只是其内容是只读的。 使用该对象,可以使用 AvailableFormats 或 Contains 方法确定可用的格式。 然后,可以调用相应的 DataPackageView 方法来获取数据。
async void OutputClipboardText()
{
DataPackageView dataPackageView = Clipboard.GetContent();
if (dataPackageView.Contains(StandardDataFormats.Text))
{
string text = await dataPackageView.GetTextAsync();
// To output the text from this example, you need a TextBlock control
TextOutput.Text = "Clipboard now contains: " + text;
}
}
跟踪剪贴板更动情况
除了复制和粘贴命令之外,可能还需要跟踪剪贴板更改。 通过处理剪贴板的 ContentChanged 事件来实现这一点。
Clipboard.ContentChanged += async (s, e) =>
{
DataPackageView dataPackageView = Clipboard.GetContent();
if (dataPackageView.Contains(StandardDataFormats.Text))
{
string text = await dataPackageView.GetTextAsync();
// To output the text from this example, you need a TextBlock control
TextOutput.Text = "Clipboard now contains: " + text;
}
}