События перетаскивания
События Drag отправляются во время операций, когда визуальные элементы имеют поведение перетаскивания. Это событие только для Редактора.
Чтобы реализовать функциональность перетаскивания, убедитесь, что визуальные элементы регистрируют обратные вызова для определенных событий.
Визуальные элементы, поддерживающие операции перетаскивания, подразделяются на два типа:
- Перетаскиваемые визуальные элементы
- Откидываемые визуальные элементы
Можно выбрать визуальный элемент, который можно перетаскивать, перетащить его на визуальный элемент, который можно сбрасывать, и отпустить элемент, чтобы его сбрасывать.
Базовый класс для всех событий перетаскивания — DragAndDropEventBase.
В следующей таблице описаны события перетаскивания и фазы их распространения:
| Мероприятие | Описание | Просыпается | Пузырьки вверх | Аннулируемые |
|---|---|---|---|---|
| DragExitedEvent | Отправляется после завершения процесса перетаскивания. | Да | Да | Нет |
| DragUpdatedEvent | Отправляется, когда перетаскиваемый элемент перемещается над целью сбрасывания. | Да | Да | Да |
| DragPerformEvent | Отправляется, когда перетаскиваемый элемент падает на цель. | Да | Да | Да |
| DragEnterEvent | Отправляется, когда перетаскиваемый элемент входит в новый VisualElement. |
Да | Нет | Нет |
| DragLeaveEvent | Отправляется, когда перетаскиваемый элемент покидает текущее место назначения. | Да | Нет | Нет |
Сделать визуальные элементы перетаскиваемыми
Чтобы сделать визуальный элемент перетаскиваемым, необходимо зарегистрировать обратные вызова для следующих трех типов событий:
Для операции перетаскивания выполните следующие действия:
- Переведите его состояние в «перетаскивание».
- Добавить соответствующие данные в
DragAndDrop. - Вызов
DragAndDrop.StartDrag(). - Обеспечить визуальный подсказчик для операции перетаскивания. Визуальный элемент зоны перетаскивания должен удалить эту обратную связь, когда он получает
DragPerformEventилиDragExitedEvent.
Список событий
DragExitedEvent
DragExitedEvent отправляется, когда пользователь перетаскивает любой перетаскиваемый объект по визуальному элементу и отпускает указатель мыши. Когда визуальный элемент зоны перетаскивания получает DragExitedEvent, он должен удалить всю обратную связь от операций перетаскивания.
DragUpdatedEvent
DragUpdatedEvent отправляется, когда указатель перемещается над визуальным элементом, когда пользователь перемещает перетаскиваемый объект.
Когда визуальный элемент зоны перемещения получает DragUpdatedEvent, он должен обновить обратную связь перемещения. Например, вы можете переместить «призрака» перетаскиваемого объекта так, чтобы он оставался под указателем мыши.
Визуальный элемент drop area должен также проверять свойства DragAndDrop и устанавливать DragAndDrop.visualMode для указания эффекта операции сбрасывания. Например, операция сбрасывания может создать новый объект, переместить существующий объект или отклонить операцию сбрасывания.
DragPerformEvent
DragPerformEvent отправляется, когда пользователь перетаскивает любой перетаскиваемый объект и отпускает указатель мыши над визуальным элементом. Это происходит только в том случае, если визуальный элемент устанавливает DragAndDrop.visualMode на что-то другое, чем DragAndDropVisualMode.None или DragAndDropVisualMode.Rejected, чтобы указать, что он может принимать перетаскиваемые объекты.
Когда визуальный элемент зоны перемещения получает DragPerformEvent, он должен действовать на перетаскиваемые объекты, хранящиеся в DragAndDrop.objectReferences, DragAndDrop.paths или DragAndDrop.GetGenericData().
Например, он может добавить новые визуальные элементы в месте, где пользователь сбрасывает объекты.
DragEnterEvent
DragEnterEvent отправляется, когда указатель входит в визуальный элемент во время операции перетаскивания.
Когда визуальный элемент зоны сбрасывания получает DragEnterEvent, он должен предоставить обратную связь, которая позволит пользователю знать, что он или один из его дочерей является целью для потенциальной операции сбрасывания. Например, вы можете добавить USS класс к целевому элементу и показать «призрак» перетаскиваемого объекта под указателем мыши.
DragLeaveEvent
DragLeaveEvent отправляется, когда указатель выходит из визуального элемента, когда пользователь перемещает перетаскиваемый объект.
Когда визуальный элемент зоны сбрасывания получает DragLeaveEvent, ему нужно прекратить давать обратную связь о сбросе. Например, можно удалить USS-класс, добавленный, когда целевой элемент получил DragEnterEvent, и больше не отображает «призрака» перетаскиваемого объекта.