Краткое руководство: основы работы с буфером обмена (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;
        });
    }
});

Если добавить такой обработчик, ваше приложение будет получать уведомление всякий раз, когда содержимое буфера обмена изменяется.

Следующие этапы

Теперь вы имеете общее представление о том, как добавить поддержку буфера обмена в свое приложение. Если у вас еще остались вопросы, рекомендуем повторно изучить раздел Рекомендации и контрольный список для команд буфера обмена, чтобы вы могли обеспечить наилучшее взаимодействие с пользователем. Также скачайте образец из коллекции кода, демонстрирующий различные способы использования буфера обмена.

Связанные разделы

Краткое руководство: основы работы с буфером обмена

Руководство и контрольный список для команд буфера обмена

DataPackage

Windows.ApplicationModel.DataTransfer

Образец приложения для буфера обмена