Как я могу перетащить плитку (изображение) в указанное место? WPF - PullRequest
2 голосов
/ 16 июня 2011

Я создаю Редактор карт для своей игры, используя формы WPF.У меня есть одна проблема, хотя.Как я могу перетащить плитку (изображение) в указанное место?

Я постараюсь уточнить мои потребности.Возьмем, к примеру, это изображение:

image

Итак, я хочу, чтобы каждая плитка - выбиралась пользователем и перетаскивалась в область сетки - "притягивалась" к ячейке.,Это понятно?Таким образом, пользователь будет видеть каждую плитку на своем месте.

Кто-нибудь знает, как это реализовать?

Спасибо.

1 Ответ

2 голосов
/ 27 сентября 2012

Я не совсем уверен, если вы спрашиваете "Как реализовать Drag & Drop?" или «Как предотвратить падение пользователя в любое место, кроме указанного места?», поэтому я попытаюсь дать некоторые подсказки об обоих.

Как реализовать Drag & Drop?

Чтобы получить базовую функциональность перетаскивания, вы должны сделать что-то вроде этого:

  • Установите для свойства AllowDrop желаемой цели перетаскивания значение true.

  • Подключите OnMouseMove и MouseLeftButtonDown, чтобы можно было определить начало операции D & D. (это события в System.Windows.UIElement)

  • Подключить для OnPreviewDragEnter, OnPreviewDragLeave, OnPreviewDragOver, OnPreviewDrop (это события в System.Windows.DragDrop)

  • Затем вы слушаете OnMouseMove и MouseLeftButtonDown, пока пользователь не инициализирует операцию перетаскивания (т. Е. Переместит либо SystemParameters.MinimumHor horizontalDragDistance или SystemParameters.MinimumVerticalDragDistance wide, пока нажата левая кнопка мыши)

  • На этом этапе вам придется инициализировать операцию D & D с помощью DragDrop.DoDragDrop

  • После инициализации вы будете прослушивать все перечисленные выше события перетаскивания, но для получения основных функций достаточно прослушать OnPreviewDrop.

Как предотвратить падение пользователя в любое место, кроме указанного места?

После того, как вы внедрили функциональность D & D, довольно просто добиться этого. Просто проверьте, является ли отправитель OnPreviewDrop текущей активной целью удаления, и проигнорируйте событие удаления, если это не так.

Подробнее

Чтобы найти более подробную информацию, посетите этот Обзор перетаскивания . Поскольку это игра, которую вы, вероятно, хотели бы отображать перетаскиваемым содержимым во время перетаскивания, вы можете добиться этого с помощью adorners . Приведенный пример недостаточно охватывает предварительный просмотр перетаскиваемого изображения, но в Google приведено много хороших примеров по теме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...