快速入门:剪贴板基础知识 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
最佳应用为用户提供对其数据尽可能多的控制。用户期望的其中一种控制方法是剪贴板操作。这些操作使用户能够剪切、复制和粘贴数据。可以在同一应用内或在同一计算机上的两个不同应用之间进行剪贴板操作。使用剪贴板,用户可以轻松地将所需信息放置到用户需要该信息的位置。
使用多种方式共享数据
在介绍如何向你的应用添加剪贴板操作之前,你应该还记得 Windows 8 支持多种不同的数据移动方法。我们在共享和交换数据中提供了对这些方法的概述。共享是其中一种方法,它与剪贴板有许多相同之处。在开发人员看来,共享和剪贴板操作使用相同的 Windows 命名空间 Windows.ApplicationModel.DataTransfer。两者也都需要你的应用收集用户选择的数据。(我们通常将此操作称为打包,因为你使用 DataPackage 类来实现此操作)。在用户看来,剪贴板是移动数据的“经典”方法。
作为一名开发人员,请记住,尽管共享和剪贴板操作非常相似,但是它们确实存在一些重要区别。使用共享时,焦点是在目标上:用户所选择的应用或服务。使用剪贴板时,焦点更多是在数据上。最重要的是,剪贴板操作是在桌面应用与 Windows 应用商店应用之间交换数据的唯一方式。
有关共享和剪贴板操作之间的差异的详细信息,请参阅共享和交换数据。
内置剪贴板支持
许多情况下,你可能根本不需要编写任何代码就可以支持剪贴板操作。可用于创建 Windows 应用商店应用的许多控件已经支持剪贴板操作。有关哪些控件可用的详细信息,请参阅添加控件和内容。
开始之前
向你的应用添加对剪贴板操作的支持非常简单。首先,你应当查阅剪贴板命令指南和清单。在其中,你将找到许多可帮助你为剪贴板操作创建最佳用户体验的信息,以及可帮助你充分利用你的代码的一些想法。
接下来,你需要考虑你希望支持哪些类型的数据格式。在 Windows 8 中,存在两种类别的格式:标准和自定义。目前,标准的格式包括:
- 文本
- HTML
- URI
- 位图
- StorageItems
- RTF
若要查看使用这些数据格式的剪贴板操作的示例,请参阅我们的代码示例。 你可能还希望查看参考主题 StandardDataFormats,使用该主题可指定你的应用支持的格式类型。
自定义数据格式,顾名思义,指的是不能归入其中一种标准格式的数据的格式。通常,这些格式代表数据的逻辑集合,如地址或事件。若要支持自定义格式,则我们强烈鼓励你使用在 http://schema.org/docs/full.htm 上指定的多种架构之一。使用众所周知的数据格式(如这些架构),可帮助确保收到剪贴板数据的应用知道如何处理该数据。
入门
支持的剪贴板操作通常有两个部分:复制(或剪切)和粘贴。首先让我们来看一下如何处理复制和剪切操作。首先,确保你的应用具有相应的引用。如果你使用 Microsoft Visual Studio 模板,只要创建新项目,就会添加这些引用。如果你使用的不是 Visual Studio,请确保你的应用有权限访问 Windows.ApplicationModel.DataTransfer 命名空间。
设置项目之后,你需要 DataPackage 对象的一个实例。该对象包含用户希望复制的数据和你希望包含的所有属性(如描述)。
var dataPackage = new Windows.ApplicationModel.DataTransfer.DataPackage();
复制和剪切
此时,你就可以指定你希望执行的剪贴板操作了。这些操作可以通过 DataPackageOperation 枚举来执行。以下是要为复制操作执行的事项:
var dataPackage = new Windows.ApplicationModel.DataTransfer.DataPackage();
dataPackage.requestedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.copy;
而以下是为剪切操作(也称为移动操作)执行的事项:
var dataPackage = new Windows.ApplicationModel.DataTransfer.DataPackage();
dataPackage.requestedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.move;
此时,你可以将用户已选择的数据添加到 DataPackage 对象。如果 DataPackage 类支持该数据,则可以在 DataPackage 对象中使用其中一种相应的方法。
添加文本的步骤:
dataPackage.setText("Hello World!");
若要查看如何将其他格式添加到 DataPackage 的示例,请参阅代码库中的剪贴板示例。还需记住,你可以向 DataPackage 添加多种格式。
最后,你需要将 DataPackage 添加到剪贴板。你可以通过调用静态 Clipboard.setContent 方法执行此操作。
Windows.ApplicationModel.DataTransfer.Clipboard.setContent(dataPackage);
粘贴
要获取剪贴板的内容,需调用静态 Clipboard.getContent 方法。此方法将返回一个包含该内容的 DataPackageView。该对象几乎与 DataPackage 对象完全相同,只不过其内容为只读。通过该对象,你可以使用 AvailableFormats 或 contains 方法来确定哪些格式可用。然后,你可以调用相应的 DataPackageView 方法来获取数据。例如,以下是将文本存储在剪贴板中的方法:
var dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.getContent();
if (dataPackageView.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.text)) {
dataPackageView.getTextAsync().then(function (text) {
// To output the text from this example, you need an HTML element
// with an id of "output".
document.getElementById("output").innerText = "Clipboard now contains: " + text;
});
}
跟踪对剪贴板的更改
除了复制和粘贴命令之外,你可能还会发现添加事件处理程序会很有帮助,这样你的应用将知道剪贴板的内容何时会改变。你可以通过处理剪贴板的 ContentChanged 事件执行此操作。
Windows.ApplicationModel.DataTransfer.Clipboard.addEventListener("contentchanged", function (event) {
var dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.getContent();
if (dataPackageView.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.text)) {
dataPackageView.getTextAsync().then(function (text) {
// To output the text from this example, you need an HTML element
// with an id of "output".
document.getElementById("output").innerText = "Clipboard now contains: " + text;
});
}
});
此处理程序准备好之后,只要剪贴板的内容发生改变,就会通知你的应用。
后续步骤
到目前为止,你应当对如何向你的应用添加剪贴板支持有一个基本的了解。如果了解得还不够,我们建议你查看剪贴板命令指南和清单,这样你可以创建尽可能最好的用户体验。另外,你可以从代码库下载我们的示例,以查看各种有关如何使用剪贴板的示例。