Не получать DragEnter / Over, события Drop в приложении silverlight 4 - PullRequest
0 голосов
/ 11 июля 2010

Я перетаскиваю объекты UserControl из одного Canvas в другой с намерением добавить туда. При наведении курсора на пункт назначения перетаскиваемый объект фактически проходит под ним. Я не получаю события DragEnter, DragOver или DragLeave. Если я уроню объект туда, у меня не будет события Drop.

Мой корневой объект - это граница, затем сетка. Сетка охватывает всю клиентскую область браузера. Имеет 8 столбцов. В каждом из столбцов есть холст, который размещается XAML.

Пример странного поведения: когда я перетаскиваю элемент из столбца 3 в столбец 4 (или больше), объект скользит под холст. Если я перетащу из столбца 3 в столбец 2 (или чуть меньше), объект скользит по верху. Похоже, что на Зордера влияет порядок создания холстов. Может кто-нибудь уточнить это?

Объекты Canvas в каждом из столбцов имеют связанные события DragEnter / Leave, но ни один из них не срабатывает, независимо от того, пересекается ли объект или находится под Canvas.

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

Я приближаюсь к концу моей веревки и, конечно, буду признателен за помощь.

Спасибо, Грег

1 Ответ

0 голосов
/ 13 июля 2010

@ токсоплазмотик: да.

RE: Получение событий не происходит.Как оказалось, события перетаскивания связаны, но не предоставляют никакой функциональности.

RE: перетаскивание под / над различными полотнами с заданными объектами.Кажется, существует некий зордер, установленный «естественным порядком» создания полотен.

Но на самом деле эти вещи не являются важными моментами.

Решение № 1.В Silverlight 3 было представлено новое поведение Expression Blend: MouseDragElementBehavior.Он заключает в себе довольно много функций перетаскивания.Он сохраняется в SL4.

Решение № 2.В codeplex есть Silverlight Toolkit, в котором (на экспериментальных этапах) есть еще одна очень приятная инкапсуляция функциональности перетаскивания.Похоже, что для этого может потребоваться дополнительное кодирование, если вы не работаете со списками, представлениями деревьев и т. Д.

Решение № 3.Но суть заключается в следующем: довольно легко выполнить перетаскивание, используя довольно хорошо документированный код Алекса Ван Бека.Это здесь: http://blogs.infosupport.com/blogs/alexb/archive/2009/09/07/A-complete-Silverlight-3-drag-and-drop-solution.aspx

Ключ к успеху - отсоединить перетаскиваемый объект от его родителя и связать его с абстракцией окна браузера, обычно корневого объекта или другого прозрачного холста.Сложность (не такая сложная) состоит в том, чтобы поддерживать синхронизацию различных систем координат.("от" холста "до" холста, перетаскиваемого объекта)

Ура!Грег

...