Элементы управления привязкой WPF

мой текущий проект свободного времени, чтобы погрузиться в WPF MVVM, является "цифровой" копией старой головоломки, которую я часто играл в детстве. В основном это простая головоломка, в которой нужно заполнить заданное пространство разными кусками, чтобы все пространство было заполнено. Но с дополнительным поворотом в гексагональном пространстве.

Чтобы проиллюстрировать это, в настоящее время он выглядит как в WPF:

http://img190.imageshack.us/img190/2553/atomgridmolecule.png

Таким образом, в основном существует ряд предопределенных частей (например, оранжевый сверху), которые можно "подключить" к данной сетке (серый материал выше).

Таким образом, результат может выглядеть примерно так:

http://img30.imageshack.us/img30/2553/atomgridmolecule.png

Я хочу, чтобы пользователь (возможно, только я ^^) мог перетаскивать фигуры в сетку. Я хочу, чтобы перетаскивание выглядело естественным, имея правильное смещение при перетаскивании в зависимости от того, где пользователь щелкнул кусок.

Обе сетки и молекулы - это один и тот же элемент управления, настраиваемый элемент управления гексагональной панели, полученный из класса панели WPF.

Проблема заключается в том, как выполнять "подключение" и особенно к "отключению".

У меня есть две идеи о том, как я могу решить эту проблему:

  • Просто покрасьте ячейки в сетку и спрячь оригинальную деталь
    • Pro:
      • Нулевая стоимость идеального выравнивания ячеек
    • Минусы:
      • Воспроизведение пьесы в нужном месте с правильным смещением мыши при перетаскивании кажется невозможным? трудно сделать
  • Привязать кусок к сетке и показать его сверху
    • Pro:
      • Перетаскивание - это простая операция перетаскивания, так же, как перетаскивание
    • Неудобство:
      • Как-то нужно выровнять кусок с базовой сеткой, какая-то привязка

Итак, какой подход мне взять? Еще важнее, как я могу реализовать это в WPF? Особенно, используя чистый способ MVVM.


Большое спасибо за Вашу помощь! Любой вход высоко оценен!

ИЗМЕНИТЬ:
Спасибо Аран, я тоже так думал.

Но как я действительно реализую это сейчас?

  • Как я могу получить координаты?
  • Все оранжевые круги связаны, так как я могу "переместить" или "вставить" их в одну часть?

Ответ 1

Я склонен пойти со второй идеей. простое привязку было бы просто проверить, находится ли центральная точка круга, который вы перетаскиваете, в пределах некоторого коэффициента допуска круга на сетке и, если это так, защелкните их.