复制和粘贴

本文介绍如何支持在通用 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;
    }
}

另请参阅