Архив

Записи с меткой «перетаскивания»

Silverlight Drag и Drop API

28 ноября 2009 13 комментариев

Введение

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

API

Ниже ядро ​​нового API:

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

/ / События
публичное мероприятие DragEventHandler DragEnter;
публичное мероприятие DragEventHandler DragLeave;
публичное мероприятие DragEventHandler DragOver;
общественное падение DragEventHandler события;

/ / Свойства
общественных AllowDrop Ьоо {get; набор;}
}

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

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

/ / Свойства
Данные общественные IDataObject {[SecuritySafeCritical] get;}
общественных Ьоо обрабатываемых {get; набор;}
}
}

Пространство имен 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 странице:
      <! - Добавить следующий сценарий до конца голова тег -> 
    <script type= "text/javascript">
    Функция handleDragEnter (oEvent) {
    / / Предотвращение умолчанию операции
    oEvent.preventDefault ();

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

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

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

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

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

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

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

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

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

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

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

    / / Если мы справились успешно, то остановить распространение события
    если (флаг)
    oEvent.stopPropagation ();
    }
    </ SCRIPT>
    <! - Использовать 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 доступна только в падение события. Доступ DragEventArgs.Data в DragEnter, DragOver и DragLeave может привести к SecurityException . И доступ к Directory, Имя_папки или FullName собственности FileInfo объекта DragEventArgs.Data может привести к ArgumentNullException.

    Демо-приложение

    Ниже представлен демо-приложения:

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

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

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

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

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

    Technorati Теги: ,