WPF привязка управления - PullRequest
10 голосов
/ 30 июня 2009

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

Просто чтобы проиллюстрировать, вот как это выглядит в WPF:

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

Таким образом, в основном есть ряд предопределенных фрагментов (например, оранжевого выше), которые можно «подключить» к данной сетке (серый элемент выше).

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

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

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

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

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

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

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

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


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

РЕДАКТИРОВАТЬ:
Спасибо Аран, я тоже так думал.

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

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

1 Ответ

1 голос
/ 02 июля 2009

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

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