Главная > Silverlight > Silverlight API буфера обмена

Silverlight API буфера обмена

Clipboard API в Silverlight

Silverlight 4 добавляет буфером обмена. Проверьте удивительные демо Скоттом Гатри и Брайан Гольдфарб сегодня на PDC , которые наглядно демонстрируют сценарии включены по Silveilght4 буфером обмена.

Clipboard API Silverlight является подмножеством WPF в буфер обмена API:

  открытые статический буфер обмена класса 
{
общественности статической Ьоо ContainsText ();
общественности статической GetText строку ();
text); государственной статической силы SetText (строка текста);
}

Он позволяет копировать / вставить Unicode строк из / в буфер обмена. GetText и SetText требуют либо из следующих добиться успеха:

  1. приложения, вызывающего Silverlight является повышение доверия приложения, или
  2. это пользователь инициировал и пользователь дает доступ буфер обмена

Для второго случая, когда GetText или SetText сначала вызывается в инициированную пользователем обработку событий, Silverlight всплывает диалог как на картинке ниже (UI может измениться в RTW):

    Clipboard Prompt
    Если пользователь нажимает да, Silverlight позволит этого и более поздних GetText / SetText звонки на успех для такого применения в ходе этой сессии, если пользователь нажимает нет, по умолчанию, Silverlight будет бросать SecurityException . В другом слове, настройки для каждого приложения, за сеанс, как получить и установить доступ к системным буфером обмена, и оно не сохраняется.

Буфер обмена в JavaScript API и WPF

Мы должны учитывать множество факторов при проектировании буфер обмена API для Silverlight. Среди них, в буфер обмена из API, JavaScript и WPF, особенно интересны, потому что мы должны изучить уроки безопасности в JavaScript и стараться быть совместимы с WPF.

Существует нет кросс-браузер, кросс-платформенный JavaScript API для доступа буфер обмена. IE обеспечивает clipboardData объект, который позволяет получить / установить / очистить строк в системный буфер:

bResult = window.clipboardData.setData (sDataFormat, SDATA);

SDATA = window.clipboardData.getData (sDataFormat);

bResult = window.clipboardData.clearData ([sDataFormat]);

где sDataFormat представляет собой строку, константа "Текст" или "URL", SDATA является строкой, и bResult является логическое значение.

Впервые объект clipboadData доступ, IE предложит пользователю разрешить сценарии для доступа буфер обмена, а настройка действует для сессии.

Clipboard API WPF поддерживает все больше и расширяемый формат данных через IDataObject , и вспомогательные функции для общих форматов, таких как текст, изображение, аудио-и FileDrop .

 открытые статический буфер обмена класса 
{
[SecurityCritical]
государственной статической силы Clear ();

общественности статической Ьоо ContainsAudio ();
format); общественности статической Ьоо ContainsData (формат строки);
общественности статической Ьоо ContainsFileDropList ();
общественности статической Ьоо ContainsImage ();
общественности статической Ьоо ContainsText ();
общественности статической Ьоо ContainsText (TextDataFormat формат);
общественности статической поток GetAudioStream ();
format); открытые статический объект GetData (формат строки);
[SecurityCritical]
общественности статической IDataObject GetDataObject ();
общественности статической GetFileDropList StringCollection ();
общественности статической BitmapSource GetImage ();
общественности статической GetText строку ();
общественности статической строки GetText (TextDataFormat формат);

общественности статической Ьоо IsCurrent (IDataObject данных);

[] audioBytes); государственной статической силы SetAudio (байт [] audioBytes);
государственной статической силы SetAudio (Stream аудиопотока);
format, object data); государственной статической силы SetData (формат строки, объект данных);
[SecurityCritical]
data); государственной статической силы SetDataObject (объект данных);
[SecurityCritical]
data, bool copy); государственной статической силы SetDataObject (объект данных, логический копия);
общественности статической SetFileDropList недействительными (StringCollection fileDropList);
государственной статической силы SetImage (BitmapSource изображение);
text); государственной статической силы SetText (строка текста);
text, TextDataFormat format); государственной статической силы SetText (строка текста, TextDataFormat формат);
}

Clipboard API в Windows, и Mac OS X

. Буфер обмена API Silverlight, в конечном счете реализована на основе API, из буфера обмена операционной системы Windows, буфер обмена API, ' описаны в MSDN, ниже отрывок дает обзор о том, как установить / получить данные из буфера обмена:

Вырезать и Операции копирования

Для размещения информации в буфер обмена, окно сначала очищает все предыдущие содержание буфера обмена с помощью EmptyClipboard функции. Эта функция посылает WM_DESTROYCLIPBOARD сообщение для предыдущего владельца буфер обмена, освобождает ресурсы, связанные с данными в буфере обмена, а также назначает буфер обмена собственности на окно, которое имеет буфер обмена открытыми. Чтобы узнать, какое окно владеет буфер обмена, вызовите GetClipboardOwner функции.

После опорожнения буфер обмена, окно помещает данные в буфер обмена в стольких форматов буфера обмена, насколько это возможно, заказать в наиболее описательные буфер обмена формат мере описательный характер. Для каждого формата, окна звонков SetClipboardData функцию, указав идентификатор формата и глобальный дескриптор памяти. Памяти, ручка может быть NULL, указывая, что делает окно данных по запросу. Для получения дополнительной информации см. Задержка рендеринга .

Вставить операции

Чтобы получить вставлять информацию из буфера обмена, окно сначала определяет формат буфера обмена для извлечения. Как правило, окна перечисляются доступные форматы буфера обмена с помощью EnumClipboardFormats функцию и использует первый формате он признает. Этот метод выбирает лучший из доступных форматов в зависимости от очередности, установленной, когда данные были помещены в буфер обмена.

Кроме того, окна можно использовать GetPriorityClipboardFormat функции. Эта функция определяет лучших из доступных форматов буфера обмена в соответствии с заданным приоритетом. Окно, которое признает только один формат буфера обмена можно просто определить, так ли формата можно с помощью IsClipboardFormatAvailable функции.

После определения формата буфера обмена в использовании, окна звонков GetClipboardData функции. Эта функция возвращает дескриптор объекта глобальной памяти, содержащих данные в заданном формате. Окно может кратко блокировки объектов в памяти для того, чтобы просмотреть или скопировать данные. Тем не менее, окно не должно свободный объект или оставить его взаперти в течение длительного периода времени.

Пока Silverlight буфер обмена API поддерживает только CF_UNICODETEXT формат для копирования / вставки текста в формате Юникод в / из буфера обмена.

Mac OS X использует картонные менеджер . Это документально на Mac Dev Center . Ниже отрывок (с API, добавлено) дает обзор:

Копирование приложение отвечает за размещение скопированного или вырезанного данных на картонных:

  1. Пользователь выбирает какие-то данные и вызывает Copy (или Cut) пункта меню.

  2. Если приложение еще ​​не имеет ссылку в буфер обмена монтажном столе, он создает один ( PasteboardCreate ).

  3. После этого приложение становится владельцем картонных и очищает текущее содержимое ( PasteboardClear ).

  4. Приложение присваивает идентификаторов элементов для выбранных данных.

  5. Если какие-либо данные должны быть обещано, приложение должно зарегистрировать обратный вызов функции хранителя обещание предоставить обещанные данные ( PasteboardSetPromiseKeeper ).

  6. Приложение добавляет один или несколько вкусов каждого элемента в монтажном столе, включая либо фактических данных, вкус или обещание с каждого аромата ( PasteboardPutItemFlavor ).

Принимающее приложение имеет несколько иной набор задач для обработки Вставить действие:

  1. Когда приложение становится активным, он проверяет, есть ли картонных был модифицирован ( PasteboardSynchronize ). Если это так, он получает список вкусов на монтажном столе. Если Есть любые вкусы приложение поддерживает, она может позволить своим Вставить пункт меню.

  2. Пользователь вызывает Вставить пункт меню.

  3. Приложение запрашивает элемент (или элементы) на монтажном столе в ароматов, которые он поддерживает

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

Если обещание хранитель копирования приложения называется, обратного вызова необходимо выполнить следующие действия:

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

  • Создание или иным образом подготовить обещанные данные для передачи.

  • Если обещанные данные не хранятся в виде файла, добавить вкус и данные монтажном столе. В противном случае, передача обещала данные в указанный файл месте.

Некоторое время спустя, когда приложение завершает работу, или когда он больше не нуждается в монтажном столе, приложение может выпуска картонных ссылки.

Как и на Windows, буфер обмена Silverlight API использует только kPasteboardClipboard и kUTTypeUTF16PlainText аромат для поддержки копирования / вставки текста в формате Юникод в / из буфера обмена.

Обратная связь

Мы рады добавить буфер обмена поддержку Silverlight, и увидеть все важные сценарии включены по этой простой API. Мне интересно услышать ваши отзывы, в частности:

  • Любые соображения безопасности за буфером обмена Silverlight API разработке и реализации
  • насколько важно, чтобы добавить поддержку других типов данных / формат, и в каком порядке приоритетов
  • насколько важно, чтобы API расширяемой, как поддержка IDataObject , позволяя пользовательский формат / вкус и задержкой рендеринга / обещали данных
    Спасибо!
      -Ning
      Technorati Теги: ,
      Tags: , , Категории: Silverlight Теги: , ,
      1. Дилип
        2 октября 2011 в 22:08 | # 1

        В режиме OOB мы можем доступ к буферу обмена образ, который был результат нажатия кнопки PRINT SCREEN из Keyboard.Please дайте мне знать.

        -Дилип

      2. 10 марта 2011 в 18:00 | # 2

        Очень хотелось бы иметь возможность вставлять Excel данных. В настоящее время, как он работает будет вырезать любое число, которое не отображается в Excel. Например: $ 19,95 показывать в Excel, но значения основной ячейки действительно 19,949999999 Excel обеспечивает хороший дисплей без ущерба для основной точности данных, но это все, что проиграли со скопировать и вставить в Silverlight ... что мои пользователи не слишком радует. Было бы неплохо иметь возможность захватить эти данные в формате Excel или по крайней мере Excel XML формат данных, так что я бы мы могли справиться с этим сценарием, когда нам нужно.

      3. Ник Грэй
        27 сентября 2010 в 18:50 | # 3

        Наш бизнес-приложения потребности пасты изображения поддержки, пожалуйста, предоставьте

      4. 19 декабря 2009 в 11:08 | # 4

        @ Мигель
        Отметил, спасибо за отзыв!

      5. 19 декабря 2009 в 11:08 | # 5

        @ Анджей Rusztowicz
        Отметил, спасибо за отзыв!

      6. 29 ноября 2009 в 16:53 | # 6

        +1 Для изображения поддержки

      7. 26 ноября 2009 в 00:56 | # 7

        Поддержка буфера обмена текст "должен иметь" для Silverlight, но поддержка буфера обмена _image_ может быть в Silverlight "убийца особенность", а также помочь разработчикам выбрать его на воздух, Flash или JavaScript.

        Простое копирование / вставка скриншотов, смайлики, фотографии бы революционизировать многие сайты, как Flickr, MySpace, и на форумах. Разработчикам будет способствовать популярность Silverlight, если только использовать его для этой единственной функцией, похоже на использование невидимых вспышки для сингла "несколько файлов загрузить" функцию.

        Так как веб-камера добавлена ​​поддержка в SL 4, это следующий очевидный шаг (пользователь может указать веб-камеру на экран, чтобы "копировать / вставить" скриншот, но действительно ли это удобным?)

      1. 26 ноября 2009 в 01:23 | # 1
      2. 30 декабря 2009 в 08:38 | # 2