Главная > Silverlight > Перетащите и Drop Silverlight API

Silverlight Перетаскивание API

Введение

Перетащите является общей парадигмы UX и верхней востребованной функцией. В Silverlight 4 Beta, мы ввели базовый набор API для того, чтобы наиболее распространенных сценария перетащить файлы фотографий и бросая их в Silverlight приложений, и мы разработали API, чтобы позволить нам раскрыть более перетаскивания функциональности по дороге без изменений API , с надеждой.

API

Ниже является ядром нового API:

  имен System.Windows 
(
общественного абстрактного класса UIElement: DependencyObject
(
/ / Поля
общественности статической чтения DependencyProperty AllowDropProperty;

/ / События
общественное мероприятие DragEventHandler DragEnter;
общественное мероприятие DragEventHandler DragLeave;
общественное мероприятие DragEventHandler DragOver;
общественное мероприятие DragEventHandler Drop;

/ / Свойства
риЬИс Ьоо AllowDrop (, который демонстрирует;)
)

sender, DragEventArgs e); общественного делегата недействительными DragEventHandler (объект отправителя, DragEventArgs е);

общественного запечатанных класс DragEventArgs: RoutedEventArgs
(
/ / Методы
общественного Пойнт GetPosition (UIElement relativeTo);

/ / Свойства
общественного IDataObject данных ([SecuritySafeCritical] получить;)
риЬИс Ьоо (обрабатывались, который демонстрирует;)
)
)

имен System.Windows.Controls
(
общественного абстрактного класса управления: FrameworkElement
(
защищенных виртуальных недействительными OnDragEnter (DragEventArgs е);
защищенных виртуальных недействительными OnDragLeave (DragEventArgs е);
защищенных виртуальных недействительными OnDragOver (DragEventArgs е);
защищенных виртуальных недействительными OnDrop (DragEventArgs е);
)
)

  • AllowDrop: это зависимость имущества с указанием того элемента перетаскивания.
  • DragEnter, DragLeave, DragOver и Drop: они разгромили событий. Они пузыриться, и огонь только на элементы с AllowDrop установлен верно.
  • OnDragEnter, OnDragLeave, OnDragOver и OnDrop: это защищенных виртуальных функций на подклассы для переопределения.
  • DragEventArgs: этот класс позволяет перетаскивания обработчики событий или метод перекрывает доступ к данным тащат или сняты.

Использование

Есть в основном два способа использования Silverlight перетащить и падение API:

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

Недостатки

Перетаскивания поставляется в Silverlight 4 Beta только позволяет наиболее распространенный сценарий: Silverlight плагин, как файл каждого снимка. Обратите внимание на следующие ограничения текущей реализации:

  • нет источника падение поддержки (QueryContinueDrag и GiveFeedback).
  • нет DragDropEffects или DragDropKeyStates в DragEventArgs.
  • нет визуальных для вытащили объекта или DragDropEffects.
  • только файл перетащить при поддержке:
    • все перетаскивания пожары только тогда, когда файлы были перетаскивать.
    • IDataObject, DataObject и DragEventArgs.Data поддерживает только один формат: "FileDrop", и данные типа FileInfo [].
  • большинство методов IDataObject бросить NotImplementedException.
  • для перетаскивания для работы на Windows, Silverlight плагин должен быть оконном. В другой слово, если <param name="windowless" value="true"/> указано, падение событий не будет срабатывать.
  • с Silverlight плагина на Mac всегда окон, необходимо подключить события JavaScript капли для запуска Silverlight событий капли. В другой слово, если вы хотите, чтобы ваш Silverlight приложения для поддержки файл падение на Mac, а также Windows, вам нужно добавить следующий сценарий и Silverlight плагин атрибуты хостинг HTML или ASPX странице:
      <! - Добавить следующий сценарий до конца тега HEAD -> 
    <script type= "text/javascript">
    Функция handleDragEnter (oEvent) (
    / / По умолчанию операций предупреждении
    oEvent.preventDefault ();

    VAR = флаг silverlightControl.dragEnter (oEvent);

    / / Если мы справились успешно, то остановить распространение события
    если (флаг)
    oEvent.stopPropagation ();
    )

    Функция handleDragLeave (oEvent) (
    / / По умолчанию операций предупреждении
    oEvent.preventDefault ();

    VAR = флаг silverlightControl.dragLeave (oEvent);

    / / Если мы справились успешно, то остановить распространение события
    если (флаг)
    oEvent.stopPropagation ();
    )

    Функция handleDragOver (oEvent) (
    / / По умолчанию операций предупреждении
    oEvent.preventDefault ();

    VAR = флаг silverlightControl.dragOver (oEvent);

    / / Если мы справились успешно, то остановить распространение события
    если (флаг)
    oEvent.stopPropagation ();
    )

    Функция handleDropEvent (oEvent) (

    / / По умолчанию операций предупреждении
    oEvent.preventDefault ();

    VAR = флаг silverlightControl.dragDrop (oEvent);

    / / Если мы справились успешно, то остановить распространение события
    если (флаг)
    oEvent.stopPropagation ();
    )
    </> Сценарий
    <! - Использование JavaScript события перетаскивания для показа событий в Silverlight перетаскивания ->
    type= "application/x-silverlight-2" width= "100%" height= "100%" <Объект данных = "данные: application/x-silverlight-2", типа = "application/x-silverlight-2" ширина = "100%" высота = "100%"
    ondragover= "handleDragOver(event)" ID = "silverlightControl" ondragenter = "handleDragEnter (событие)" ondragover = "handleDragOver (событие)"
    > ondragleave = "handleDragLeave (событие)" ondrop = "handleDropEvent (событие)">

  • DragEventArgs.Data доступна только в мероприятии Drop. Доступ в DragEventArgs.Data DragEnter, DragOver DragLeave и может привести к SecurityException . И доступ к Directory, Имя_папки или FullName свойство объекта FileInfo от DragEventArgs.Data может привести к ArgumentNullException.

    Демо App

    Ниже демо-приложения:

  • верхнем левом углу вложенных сеток использовать капли целевой обработчик событий для отображения DragEventArgs информации.
  • в правом верхнем углу вложенных сеток содержат управления ImageDropTarget пользователь, который переопределяет метод OnDrop оказать упал файл, если он есть образ.
  • нижний ListBox показывает последовательность событий перетаскивания их бьется, и DragEventArgs информации.

    Click to run DragDropDemo if you have Silverlight 4 Beta installed.

    Вы можете найти полный исходный здесь .

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

    Хотя мы рады добавить перетащить к Silverlight, мы знаем, Есть много, чтобы закончить / улучшить, а то, что мы выпустили всего лишь бета. Как всегда, ваше мнение высоко ценится, и будет использоваться в качестве важных данных, помогая нам приоритетов в работе. Спасибо!

    Technorati Теги: ,

    Делите и наслаждайтесь:

    • Print
    • email
    • RSS
    • Twitter
    • TwitThis
    • del.icio.us
    • LinkedIn
    • Technorati
    • Facebook
    • Google Bookmarks
    • Live
    • MySpace
    • QQ书签
    1. 19 июля 2010 в 20:41 | # 1

      @ Давида Лейзнер
      Привет Давид,

      Да, поведение в значительной степени то же самое в SL4 RTM: пользователь увидит изменение стандартного плагина курсор на уровне, т.е., если есть одна управления с AllDrop установлен верно, все плагин будет отображать курсор позволяет капли, но это не контролирует конкретные, и это не настраиваемый, т.е. курсор не изменится управления с AllDrop установлен неверно, и нет DragDropEffects установить в DragEventArgs. Мы можем осуществлять более DnD функциональности в будущих версиях.

      Спасибо,

      Нин-

    2. 22 июня 2010 в 11:35 | # 2

      Спасибо вам за это чрезвычайно полезный и простой в реализации функции!

      Вопрос: в оригинальной статье вы сказали, что в Silverlight 4 Beta "нет никаких визуальных для вытащили объекта или DragDropEffects".

      Это также относится к окончательной Silverlight 4 выпуска?

      При перетаскивании изображения из Windows Explorer с Silverlight ListBox, будет крайне полезно настроить внешний вид курсора, а также имеют различные курсор стиль в зависимости от того целевой элемент AllowDrop или нет.

      Спасибо!

    3. 15 июня 2010 в 22:10 | # 3

      Привет, спасибо за пример кода.

    4. Стивен Grigoleit
      3 июня 2010 в 6:04 | # 4

      Привет,

      Можно ли предотвратить DataGridDragDropTarget с начала перетащить действие?

      Я хочу, чтобы использовать один DataGrid только DragSource и еще один только DropTarget. И только DropTarget-DataGrid не должно быть это "StartDragShadow" при нажатии и перемещении мыши по пункту повестки дня.

      Спасибо!
      Стивен

    5. 25 декабря 2009 в 21:47 | # 5

      @ Руди
      Я также хотел бы know.thank вас!
      что касается
      Silverlight

    6. 19 декабря 2009 в 11:04 | # 6

      @ Руди
      Пожалуйста, смотрите другие мои ответы. Инструментарий Silverlight уже ListBoxDragDropTarget , так что вы можете перетащить из ListBox. Вам нужно реализовать собственные сопротивления Холст перетаскивания контейнера, в настоящее время.

    7. 19 декабря 2009 в 10:22 | # 7

      @ ГБ
      Сейчас SL4 исполнения поддерживает только SL плагин, как файл каждого снимка, а также подвергает капли целевого свойства (AllDrop) и события (DragEnter / Переместить / Оставь, Drop), а не тащить источника события (GiveFeedback, QueryContinueDrag). Он не полностью расширяемой с помощью IDataObject либо. Если вы не можете ждать, ваш лучший шанс сейчас посмотреть на инструментарий реализации, которая позволяет перетащить и из DataGrid в плагина SL. Код в DataGridDragDropTarget.cs под источником \ Controls.Data.Toolkit проекта. Спасибо.

    8. ГБ
      13 декабря 2009 в 17:04 | # 8

      привет, я хочу знать, как осуществить в перетащить и падение на DataGrid?

    9. Руди
      29 ноября 2009 в 10:46 | # 9

      Я хотел бы знать, если Есть ли способ осуществления и перетащите нужные объекты (иконы) из списка на холсте?

      С уважением

      Руди

    10. 28 ноября 2009 в 9:59 | # 10

      @ Брайс Пруньер
      Да. Джафар осуществляет почти полный, WPF совместимы, функцию перетаскивания для Silverlight 3 и Silverlight 4. Она поставляется как часть Silverlight Инструментарий . Я настоятельно рекомендую проверить его блоге для получения дополнительной информации.

      Пожалуйста, обратите внимание ключевые различия между этими двумя перетащить реализации: версия Инструментарий осуществляется на верхней части исполнения, поэтому она требует контейнер * DragDropTarget, и работает только между элементами управления плагин Silverlight. Инструментарий использует осуществления выполнения перетаскивания API, когда он может, как и в Silverlight 4 Toolkit, Microsoft.Windows.DragDrop.AllowDrop использует UIElement.AllowDrop собственности. Хотя выполнения подвергает капли целевых мероприятий для всех UIElement, осуществление Инструментарий уже ручки тех событий, по важным управления, такие как DataGrid, ListBox и TreeView, поэтому она очень проста в использовании. Мы убедились, API, являются совместимыми насколько это возможно, чтобы люди могли использовать как совместно, так сейчас, и перейти на время выполнения практических действий, а просто, как и время выполнения предоставляет более перетаскивания функций. Это также общий подход Silverlight Toolkit, как я называл в начале поста управления Silverlight .

    11. Брайс Пруньер
      28 ноября 2009 в 7:55 | # 11

      SL4 Toolkit (System.Windows.Controls.Toolkit) обеспечивает более высокий уровень DragDrop реализации для внутри Silverligth Перетащите и Drop.
      Не во всех случаях в настоящее время поддерживается SL 4 Инструментарий, но этого, можно создать свой собственный от абстрактного класса DragDropTarget.

      что касается

    1. Нет уведомлений.