Архив

Архив за Ноябрь, 2009

Silverlight Перетащите и 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 Ьоо {получить, установить;}
}

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

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

/ / Свойства
общественных IDataObject Данные {[SecuritySafeCritical] получить;}
риЬИс Ьоо Handled {получить, установить;}
}
}

имен 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 Теги: ,