How would you design a docking library for WPF?
I want to implement a docking library in wpf with behavior similar to Adobe Photoshops CS3.
You can attach floating Panels to other Panels or Docks by mouse dragging. Docks have a fixed location.
Would you use a central Docking Manager class? How would the message flow look like? I was thinking of using 2 interfaces, called IDock and IDockable, with the panel implementing both, and a dock implementing only IDock.
I'm looking for some specific design patterns or OO principles that could help me here, so that the overall design is sound. I know that I'm not really specific here, but that's because I don't know where to start.
Example of a Panel to Panel movement:
Maybe you could start studying http://www.codeplex.com/AvalonDock which is a wpf docking library. There is probably something to learn from it.