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 информации.
Вы можете найти полный исходный здесь .
Обратная связь
Хотя мы рады добавить перетащить к Silverlight, мы знаем, Есть много, чтобы закончить / улучшить, а то, что мы выпустили всего лишь бета. Как всегда, ваше мнение высоко ценится, и будет использоваться в качестве важных данных, помогая нам приоритетов в работе. Спасибо!









@ Давида Лейзнер
Привет Давид,
Да, поведение в значительной степени то же самое в SL4 RTM: пользователь увидит изменение стандартного плагина курсор на уровне, т.е., если есть одна управления с AllDrop установлен верно, все плагин будет отображать курсор позволяет капли, но это не контролирует конкретные, и это не настраиваемый, т.е. курсор не изменится управления с AllDrop установлен неверно, и нет DragDropEffects установить в DragEventArgs. Мы можем осуществлять более DnD функциональности в будущих версиях.
Спасибо,
Нин-
Спасибо вам за это чрезвычайно полезный и простой в реализации функции!
Вопрос: в оригинальной статье вы сказали, что в Silverlight 4 Beta "нет никаких визуальных для вытащили объекта или DragDropEffects".
Это также относится к окончательной Silverlight 4 выпуска?
При перетаскивании изображения из Windows Explorer с Silverlight ListBox, будет крайне полезно настроить внешний вид курсора, а также имеют различные курсор стиль в зависимости от того целевой элемент AllowDrop или нет.
Спасибо!
Привет, спасибо за пример кода.
Привет,
Можно ли предотвратить DataGridDragDropTarget с начала перетащить действие?
Я хочу, чтобы использовать один DataGrid только DragSource и еще один только DropTarget. И только DropTarget-DataGrid не должно быть это "StartDragShadow" при нажатии и перемещении мыши по пункту повестки дня.
Спасибо!
Стивен
@ Руди
Я также хотел бы know.thank вас!
что касается
Silverlight
@ Руди
Пожалуйста, смотрите другие мои ответы. Инструментарий Silverlight уже ListBoxDragDropTarget , так что вы можете перетащить из ListBox. Вам нужно реализовать собственные сопротивления Холст перетаскивания контейнера, в настоящее время.
@ ГБ
Сейчас SL4 исполнения поддерживает только SL плагин, как файл каждого снимка, а также подвергает капли целевого свойства (AllDrop) и события (DragEnter / Переместить / Оставь, Drop), а не тащить источника события (GiveFeedback, QueryContinueDrag). Он не полностью расширяемой с помощью IDataObject либо. Если вы не можете ждать, ваш лучший шанс сейчас посмотреть на инструментарий реализации, которая позволяет перетащить и из DataGrid в плагина SL. Код в DataGridDragDropTarget.cs под источником \ Controls.Data.Toolkit проекта. Спасибо.
привет, я хочу знать, как осуществить в перетащить и падение на DataGrid?
Я хотел бы знать, если Есть ли способ осуществления и перетащите нужные объекты (иконы) из списка на холсте?
С уважением
Руди
@ Брайс Пруньер
Да. Джафар осуществляет почти полный, 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 .
SL4 Toolkit (System.Windows.Controls.Toolkit) обеспечивает более высокий уровень DragDrop реализации для внутри Silverligth Перетащите и Drop.
Не во всех случаях в настоящее время поддерживается SL 4 Инструментарий, но этого, можно создать свой собственный от абстрактного класса DragDropTarget.
что касается