мой текущий проект свободного времени, чтобы погрузиться в WPF MVVM, является "цифровой" копией старой головоломки, которую я часто играл в детстве. В основном это простая головоломка, в которой нужно заполнить заданное пространство разными кусками, чтобы все пространство было заполнено. Но с дополнительным поворотом в гексагональном пространстве.
Чтобы проиллюстрировать это, в настоящее время он выглядит как в WPF:
http://img190.imageshack.us/img190/2553/atomgridmolecule.png
Таким образом, в основном существует ряд предопределенных частей (например, оранжевый сверху), которые можно "подключить" к данной сетке (серый материал выше).
Таким образом, результат может выглядеть примерно так:
http://img30.imageshack.us/img30/2553/atomgridmolecule.png
Я хочу, чтобы пользователь (возможно, только я ^^) мог перетаскивать фигуры в сетку. Я хочу, чтобы перетаскивание выглядело естественным, имея правильное смещение при перетаскивании в зависимости от того, где пользователь щелкнул кусок.
Обе сетки и молекулы - это один и тот же элемент управления, настраиваемый элемент управления гексагональной панели, полученный из класса панели WPF.
Проблема заключается в том, как выполнять "подключение" и особенно к "отключению".
У меня есть две идеи о том, как я могу решить эту проблему:
- Просто покрасьте ячейки в сетку и спрячь оригинальную деталь
- Pro:
- Нулевая стоимость идеального выравнивания ячеек
- Минусы:
- Воспроизведение пьесы в нужном месте с правильным смещением мыши при перетаскивании кажется невозможным? трудно сделать
- Pro:
- Привязать кусок к сетке и показать его сверху
- Pro:
- Перетаскивание - это простая операция перетаскивания, так же, как перетаскивание
- Неудобство:
- Как-то нужно выровнять кусок с базовой сеткой, какая-то привязка
- Как-то нужно выровнять кусок с базовой сеткой, какая-то привязка
- Pro:
Итак, какой подход мне взять? Еще важнее, как я могу реализовать это в WPF? Особенно, используя чистый способ MVVM.
Большое спасибо за Вашу помощь! Любой вход высоко оценен!
ИЗМЕНИТЬ:
Спасибо Аран, я тоже так думал.
Но как я действительно реализую это сейчас?
- Как я могу получить координаты?
- Все оранжевые круги связаны, так как я могу "переместить" или "вставить" их в одну часть?