2010-12-31 9 views
0

Ich habe ein Ribbon-Steuerelement mit mehreren Tasten, die verschiedene Fenster/Benutzer-Steuerelement im Hauptbereich des Fensters anzeigen müssen. Ich denke darüber nach, ein Benutzersteuerelement für jeden 'Funktionsbereich' zu erstellen, der sich auf seine Schaltfläche in der Multifunktionsleiste bezieht.DockPanel und User Control UI mit Ribbon Control

So etwas wie

Public Class RibbonViewModel 
Public ReadOnly ucPreferences As UserControl = New ucPreferences 
Public ReadOnly ucMain As UserControl = New ucMain 
End Class 

Benutzer klickt auf die Schaltfläche Vorlieben und ich werde tun,

dockMain.Children.Clear() 
dockMain.Children.Add(oRibbon.ucPreferences) 

Dieses so weit funktioniert wie das Layout geht, aber ich bin nicht sicher, welche Probleme ich könnte laufen in.

Antwort

1

Dies wird sicherlich funktionieren; Ein robusterer Ansatz wäre jedoch die Verwendung von Prism ... genauer gesagt die IRegionManager.

Mit dieser Funktion können Sie Regionen innerhalb Ihrer Anwendung definieren, in die Sie Inhalte pushen können, um innerhalb der Region zu leben. Ein Beispiel wäre ...

<ad:DockingManager Grid.Row="1" Margin="0"> 
     <ad:DocumentPane x:Name="WorkspaceRegion" prismrgn:RegionManager.RegionName="WorkspaceRegion"/> 
    </ad:DockingManager> 

... wo ad ist der Namespace für die AvalonDock Anordnung; aber es könnte dein DockPanel genauso sein. Diese kann dann in den Code hinter referenziert werden wie folgt ...

_regionManager.AddToRegion("WorkspaceRegion", workspaceContent); 
    _regionManager.Regions["WorkspaceRegion"].Activate(workspaceContent); 

... wo _regionManager ist eine Instanz über DI innerhalb des contructor des Objekts empfangenen workspaceContent im WorkspaceRegion platzieren.

Dies bietet eine gute Entkopplung in Bezug auf die Aktion, die das Interface für die angegebene Aktion angezeigt werden soll. Es bietet auch eine Abstraktion über die Region selbst, dh ... ist es eine DockPanel oder eine andere Kontrolle.

Wie bereits erwähnt, wird Ihr erster Ansatz funktionieren. Ob Sie sich für ein Framework wie Prism entscheiden sollten, um Probleme zu isolieren, oder auch um die Funktionalität zu erhöhen, hängt von der Größenordnung dieses Projekts ab, sowohl jetzt als auch in Zukunft.

+0

Große Antwort und Erklärung! Ich werde in die Prism-Option schauen, da ich weiß, dass einige Leute das hier bei der Arbeit verwenden. Dies ist ein kleineres Projekt, das * nicht viel wachsen sollte, damit ich bei der Docking-Option für die Benutzersteuerung bleiben kann. – knockando