Implementación de un sistema de ventanas multidock (como blend, visual studio) en WPF

¿Cómo implementaría un sistema de ventanas de caja de herramientas de acoplamiento como se ve en Expression Blend, donde puede acoplar las ventanas de la caja de herramientas de muchas maneras entre sí, superponiéndose como pestañas o como ventanas flotantes de nivel superior? Mi sistema debería comportarse más o menos igual que en Expression Blend. También la forma en que obtengo señales visuales donde la ventana de la caja de herramientas se acoplaría al arrastrar es exactamente lo que necesito.

Solo hay una excepción: en la mezcla al arrastrar a una ventana de caja de herramientas que ya está en el nivel superior (arrancada), solo puedo acoplarla como una pestaña que llena toda la ventana. Sin embargo, necesito un sistema donde no haya diferencia entre una ventana de caja de herramientas y la ventana principal. Necesito poder acoplar las ventanas una debajo de la otra en una ventana de la caja de herramientas al igual que en la ventana principal.

También tenga en cuenta que debido a una política interna no puedo usar ninguna fuente abierta o biblioteca de terceros para esto.

¿Me interesaría cómo configuraría el diseño de clase general para algo como esto? Me gustaría mantenerme lo más genérico posible para que pueda usarse en muchos escenarios diferentes.

El comportamiento de acoplamiento es como en la siguiente imagen. La imagen central muestra la región sensible de arrastre de acoplamiento. Y las imágenes exteriores donde la ventana se rompería:

texto alternativo http://img196.imageshack.us/img196/2450/dockingregions.png

En general, me enfrento a problemas importantes aquí: ¿Cómo diseño el modelo de programación (cómo persisten las configuraciones de acoplamiento en XAML) y cómo implemento de manera aguda la funcionalidad subyacente. Mi primer pensamiento sería que me gustaría tener una simbiosis de un DockPanel y un TabControl. Algo en las líneas de esto:

<DockTabControl>
  <DockTabItem Dock="FirstLeft">
    <DockTabItem.Header>
        <TextBlock>Tab 1</TextBlock>
    </DockTabItem.Header>
    <!-- Tab 1 content -->
  </DockTabItem>
  <DockTabItem Header="Tab 2" Dock="SecondLeft" DockMode="MergeWithPreviousToTabgroup">
    <!-- Tab 2 content -->
  </DockTabItem>
  <DockTabItem Header="Tab 3" Dock="FirstMiddle">
    <!-- Tab 3 content -->
  </DockTabItem>
</DockTabControl>

Por supuesto, esto aún no tiene sentido. El acoplamiento no se puede definir de esa manera y el problema de la ventana aún no se aborda aquí. Pero me gusta la idea de definir el acoplamiento y los grupos de pestañas simplemente definiendo algunas propiedades en el DockTabItem. Realmente no me gustaría introducir controles adicionales como TabGroups o similares. Me gusta cómo se comporta el acoplamiento en el DockPanel simplemente definiendo el orden de los elementos secundarios y la propiedad adjunta del Dock. Por supuesto, mi acoplamiento será un poco más complejo y se comportará más como lo que hace Grid.

Respuestas a la pregunta(4)

Su respuesta a la pregunta