Die Implementierung eines multidock-window-system (wie blend, visual studio) in WPF

Wie würden Sie gehen zu implementieren, eine docking-toolbox windowing-system wie in Expression Blend, wo Sie andocken können toolbox-windows in eine Menge von Möglichkeiten, beneat einander überlappenden, als tabs oder als schwebende top-level-Fenster. Mein system sich Verhalten soll, so ziemlich das gleiche wie in Expression Blend. Auch bekomm ich die Weg visuellen Hinweise, wo Sie das toolbox-Fenster andocken beim ziehen ist genau das, was ich brauche.

Es ist nur eine exeception: In Mischung beim ziehen auf eine "toolbox" Fenster, das ist schon oberste Ebene (abgerissen) kann ich nur die dock es als Registerkarte Füllung das ganze Fenster. Ich allerdings brauche ein system, wo es keinen Unterschied zwischen einem toolbox-Fenster und dem Hauptfenster. Ich muss in der Lage sein, dock, die windows unter einander in einem toolbox-Fenster als das Hauptfenster.

Beachten Sie auch, dass aufgrund einer internen Politik, die ich nicht verwenden können, einer open-source-oder 3rd-party-Bibliothek für diese.

Würde mich interessieren, wie würden Sie das setup der Allgemeinen Klasse design für so etwas? Ich würde gerne noch bleiben, so generisch wie möglich sein, damit es verwendet werden kann für viele verschiedene Szenarien.

Den dockeing Verhalten ist, wie in der folgenden Abbildung. Das mittlere Bild zeigt die sensetive drag-docking-region. Und die äußeren Bilder, wo das Fenster snap:

alt-text http://img196.imageshack.us/img196/2450/dockingregions.png

Generell bin ich mit Bürgermeister Probleme hier: Wie entwerfe ich die Programmier-Modell (wie sind die docking-Konfigurationen werden beibehalten, in XAML) und wie mache ich das konkret umsetzen der zugrunde liegenden Funktionalität. Meine ersten Gedanken wären, dass ich gern habe, eine Symbiose von einem DockPanel und ein TabControl. Etwas in der Art von diesem:

<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>

Natürlich nicht noch Sinn machen. Docking kann nicht definiert werden, und die Fenster-problem nicht angesprochen, hier noch. Aber ich mag die Idee, die Definition der docking und der tabgroups nur durch die Festlegung einiger Eigenschaften auf die DockTabItem. Ich möchte wirklich nicht mehr vorstellen, extra Kontrollen wie TabGroups oder ähnliches. Ich mag, wie die docking-Verhalten im DockPanel nur durch die Festlegung der Reihenfolge der Kinder und der Dock angefügte Eigenschaft. Natürlich meine docking wird ein bisschen komplexer und verhält sich mehr wie das, was der Startaufstellung ist.

  • Würde ich dringend empfehlen, nicht die Umsetzung selbst. Der Aufwand ist ziemlich groß. Sie sparen sich eine Menge Zeit-und somit eine Menge Geld -- durch den Kauf eines off-the-shelf Produkt, wie SandDock (divelements.com/net/controls/sanddockwpf/screenshots.aspx). Sollte reduzieren auch das Risiko, dass die third-party-Komponente wird abgehärtet worden aus Verwendung von vielen Kunden in verschiedenen Szenarien! (Ich bin nicht im Zusammenhang mit DivElements und haben keine persönliche Erfahrung mit SandDock -- nur geben Sie es als ein Beispiel.)
  • Wie viele manmonths kann es vielleicht sein, implementieren Sie es selbst? Es sieht nicht so hart auf den ersten Blick.
  • Meine Herren, Sie haben viel mehr Vertrauen als mir *grins* - es klingt ziemlich hart zu mir! Nachdem alle, die Sie unterstützen möchten, eine "Menge verschiedene Szenarien" und "dock toolbox windows in einer Vielzahl von Möglichkeiten." Klingt für mich wie ein multi-Wochen-Projekt an der minimum, aber natürlich weiß ich nicht Ihren Anforderungen oder Ihre team-Fähigkeiten!
  • Multiweeks klingt ok für mich. 🙂
  • Haben Sie ausgecheckt haben AvalonDock? Es ist kostenlos 🙂 codeplex.com/AvalonDock
  • Guter Tipp für AvalonDock! 🙂
  • Ich verstehe die Notwendigkeit, vorsichtig zu sein in Bezug auf Lizenzen, aber ich muss Zustimmen, die anderen hier. Wenn es open source ist und die Lizenz nicht zu restriktiv, dann sollten Sie wirklich über etwas, was bereits geschrieben und getestet, anstatt Ihre Zeit verschwenden es umschreiben. AvalonDock Führerschein nicht zwingen, Sie zu öffnen Sie Ihren code wie einige Lizenzen zu tun, und ermöglicht es Ihnen, alle änderungen, die Sie wollen. Das EINZIGE, was Sie tun müssen ist, geben Sie den copyright-Hinweis zusammen mit Ihnen, wenn Sie Ihr Produkt versenden. Was hindert Sie, es zu benutzen?

InformationsquelleAutor bitbonk | 2010-02-11
Schreibe einen Kommentar