Поделиться через


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

Копирование и вставка — это фундаментальный способ обмена данными между приложениями или приложением. В этой статье показано, как реализовать копирование и вставку в приложения WinUI с помощью API буфера обмена. Вы узнаете, как копировать, вырезать и вставлять данные, отслеживать изменения буфера обмена и использовать класс DataPackage для обработки различных форматов данных.

Замечание

Эти API также можно использовать в других классических приложениях с помощью API Windows Runtime (WinRT). Дополнительные сведения см. в разделе Call Windows Runtime API в классических приложениях.

Проверьте встроенную поддержку буфера обмена

Во многих случаях для поддержки операций буфера обмена не требуется писать код. Многие элементы управления XAML по умолчанию, которые можно использовать для создания приложений, уже поддерживают операции буфера обмена.

Приступите к настройке.

Сначала включите пространство имен Windows.ApplicationModel.DataTransfer в ваше приложение. Затем добавьте экземпляр объекта DataPackage. Этот объект содержит как данные, которые пользователь хочет скопировать, так и любые свойства (например, описание), которые требуется включить.

using Windows.ApplicationModel.DataTransfer;
...
var dataPackage = new DataPackage();

Копировать и вырезать

Копировать и вырезать (также называемые перемещением) работают почти точно так же. Выберите нужную операцию с помощью свойства RequestedOperation .

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

Установите скопированное содержимое

Затем можно добавить данные, выбранные пользователем, в объект DataPackage. Если эти данные поддерживаются классом DataPackage , можно использовать один из соответствующих методов объекта DataPackage . Вот как добавить текст с помощью метода SetText :

dataPackage.SetText("Hello World!");

Последним шагом является добавление DataPackage в буфер обмена путем вызова метода static 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;
    }
}