Canvas
- правильный контейнер для использования, так как вы можете позиционировать его дочерний элемент управления по координатам.Ваша проблема больше в перемещении элементов, что на самом деле представляет собой перетаскивание.
Вам придется обрабатывать события мыши: MouseDown
для выбора элемента, MouseMove
для обнаружения перетаскивания и MouseUp
чтобы бросить это.Во время перемещения или при опускании вы можете изменить координаты элемента для автоматического выравнивания его по сетке или по сравнению с окружающими элементами.
Я успешно создал такой проект в Silverlight и использовал Adorner
s для добавленияизмените размер обработчиков на элементы.
Я решил вопрос панорамирования и масштабирования, поместив Canvas
в Viewbox
, который был в ScrollViewer
.Если вы хотите, чтобы пользователь мог управлять коэффициентом масштабирования, примените LayoutTransform
к Canvas
(доступно в Toolkit ).