The Canvas
is the right container to use as you can position its child control by coordinates. Your problem is more about moving elements around, which is in fact drag & drop.
You'll have to handle mouse events: MouseDown
to select an item, MouseMove
to detect a drag and MouseUp
to drop it. During the move or at the drop, you can change the element's coordinates to auto-align it on a grid or compared to surrounding elements.
I successfully made such a project in Silverlight and used Adorner
s to add resize handlers to the elements.
I solved the panning and zooming question by putting the Canvas
into a Viewbox
, which was in a ScrollViewer
. If you want to let the user control the zoom factor, apply a LayoutTransform
to the Canvas
(available in the Toolkit).