Копирование и вставка

В этой статье объясняется, как обеспечить поддержку копирования и вставки в приложениях универсальной платформы 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!");

Наконец добавьте DataPackage в буфер обмена, вызвав статический метод SetContent.

Clipboard.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;
    }
}

См. также раздел