Mit dem Steuerelement VBDockingManager können Sie Ihre Designs in andockbaren Fenstern anzeigen:
Ein anzuzeigendes Design kann sich in einem der vier Zustände befinden, das mit den enum "Global.VBDesignDockState" beschrieben wird:
- AutoHideButton: Versteckt als Button an einem der vier Seiten,
- Docked: angedockt an einem der vier Seiten,
- Tabbed: als Registerkarte,
- FloatingWindow: als Fenster, das frei verschoben werden kann.
Die Orientierung des Docked- oder AutoHideButton Zustands steuern Sie mit dem enum "Global.VBDesignDockPosition":
Diese Eigenschaften setzen Sie im XAML-Code als Attached-Properties in VBDesigns. Der Dockingmanager selbst besitzt die Content-Property VBDesignList, die eine Liste von VBDesigns ist.
<vb:VBDockingManager xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vb="http://www.iplus-framework.com/ACFramework/xaml"
FocusView="{Binding MyFocusView}">
<vb:VBDesign VBContent="*InOrderForm"
vb:VBDockingManager.Container="TabItem"
vb:VBDockingManager.DockState="Tabbed"
vb:VBDockingManager.DockPosition="Bottom"
vb:VBDockingManager.IsCloseableBSORoot="False"
vb:VBDockingManager.RibbonBarVisibility="Hidden"
vb:VBDockingManager.WindowSize="0,0"
FocusNames="Lines,Postings" />
<vb:VBDesign VBContent="*Explorer"
vb:VBDockingManager.Container="DockableWindow"
vb:VBDockingManager.DockState="AutoHideButton"
vb:VBDockingManager.DockPosition="Right"
vb:VBDockingManager.IsCloseableBSORoot="False"
vb:VBDockingManager.RibbonBarVisibility="Hidden"
vb:VBDockingManager.WindowSize="400,400" />
</vb:VBDockingManager>
Falls Sie den DockState="Tabbed" vorgeben, müssen Sie "vb:VBDockingManager.Container" immer auf "TabItem" setzen. Sonst immer als "DockableWindow".
Falls Sie in VBDesign untergeordnete Geschäftsobjekte anzeigen wollen, können Sie mit der Eigenschaft "IsCloseableBSORoot" steuern, ob das Fenster vom Anwender rechts oben geschlossen werden darf. Mit der Eigenschaft "RibbonBarVisibility" steuern Sie, ob das Menüband versteckt werden soll.
Mit "WindowSize" definieren Sie die X/Y-Größe des Fensters, das erscheint wenn Sie die Maus über den Button bewegen.
Automatische Fokussierung
Im Kapitel für Geschäftsobjekte sehen Sie ein Beispiel wie Sie ein Geschäftsobjekt im Hintergrund öffnen und einen Filter setzen können, um den richtigen Datensatz anzuzeigen. Bei hierarchischen Master-Detail-Beziehungen kann es vorkommen, dass es viele ineinander geschachtelte VBDockingManager gibt. Damit beim Öffnen des Geschäftsobjektes auch die richtigen Registerkarten, innerhalb der DockingManager-Schachtelung, geöffnet werden, gibt es zwei spezielle Abhängigkeitseigenschaften:
- "public string FocusView" in der Klasse VBDockingManager und VBTabControl.
- "public string FocusNames" in der Klasse VBDesign und VBTabItem.
Definieren Sie eine String-Eigenschaft in Ihrem Geschäftsobjekt, die Sie dann an die FocusView-Abhängigkeitseingenschaft binden. z.B.
private string _MyFocusView;
public string MyFocusView
{
get { return _MyFocusView; }
set {
if (_MyFocusView != value)
{
_MyFocusView = value;
OnPropertyChanged("MyFocusView");
} }
}
Diese Eigenschaft speichert eine beliebeige Zeichenkette, die angibt was an der Benutzeroberfläche angezeigt bzw. fokussiert werden soll.
Nehmen wir an das Design "*InOrderForm" aus dem oberen XAML-Beispiel besteht wiederum aus einem DockingManager der zwei Karteikarten anzeigt:
<vb:VBDockingManager FocusView="{Binding MyFocusView}">
<vb:VBDesign VBContent="*InOrderLines"
FocusNames="Lines"
vb:VBDockingManager.Container="TabItem"
vb:VBDockingManager.DockState="Tabbed"
vb:VBDockingManager.DockPosition="Bottom" />
<vb:VBDesign VBContent="*InOrderPostings"
FocusNames="Postings"
vb:VBDockingManager.Container="TabItem"
vb:VBDockingManager.DockState="Tabbed"
vb:VBDockingManager.DockPosition="Right" />
</vb:VBDockingManager>
Wenn nun die MyFocusView den Wert "Postings" aufweist, dann wird im äußeren Dockingmanager die Registerkarte mit "*InOrderForm" fokussiert, weil der Wert mit der kommaseparierten Aufzählung "Lines,Postings" in der Eigenschaft FocusNames vorkommt.
Der innere Dockingmanager fokussiert dann die Registerkarte mit "*InOrderPostings", weil diese die Eigenschaft FocusNames "Postings" enthält.