复制和粘贴

本文介绍如何使用剪贴板支持在通用 Windows 平台(UWP)应用中复制和粘贴。 复制和粘贴是在应用之间或应用中交换数据的经典方法,几乎每个应用都可以在某种程度上支持剪贴板操作。 有关演示多个不同复制和粘贴方案的完整代码示例,请参阅 剪贴板示例

检查内置剪贴板支持

在许多情况下,您不需要编写代码来支持剪贴板操作。 许多可用于创建应用的默认 XAML 控件已经支持剪贴板作。

准备就绪

首先,在应用中包括 Windows.ApplicationModel.DataTransfer 命名空间。 然后,添加 DataPackage 对象的实例。 此对象包含用户要复制的数据以及要包含的任何属性(如说明)。

DataPackage dataPackage = new DataPackage();

复制和剪切

复制和剪切(也称为 移动)的操作方式几乎完全相同。 使用 RequestedOperation 属性来选择您所需的操作。

// copy 
dataPackage.RequestedOperation = DataPackageOperation.Copy;
// or cut
dataPackage.RequestedOperation = DataPackageOperation.Move;

设置复制的内容

接下来,可以添加用户已选择的数据到 DataPackage 对象。 如果 DataPackage 类支持此数据,则可以使用 DataPackage 对象的相应方法之一。 下面介绍如何使用 SetText 方法添加文本:

dataPackage.SetText("Hello World!");

最后一步是通过调用静态 SetContent 方法将 DataPackage 添加到剪贴板。

Clipboard.SetContent(dataPackage);

粘贴

若要获取剪贴板的内容,请调用静态 GetContent 方法。 此方法返回包含内容的 DataPackageView 。 此对象与 DataPackage 对象几乎完全相同,只是其内容是只读的。 使用该对象,可以使用 AvailableFormatsContains 方法确定可用的格式。 然后,可以调用相应的 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;
    }
}

另请参阅