A custom control that arranges elements as panes similar to that of Microsoft Visual Studio.
Object Model
Syntax
| Visual Basic (Declaration) | |
|---|
Public Class XamDockManager
Inherits ContentControl
Implements ICommandHost, IPaneContainer |
| C# | |
|---|
public class XamDockManager : ContentControl, ICommandHost, IPaneContainer |
Example
This example demonstrates how to initialize a XamDockManager with ContentPanes in the various supported states (e.g. floating, unpinned) and also creates a DocumentContentHost to provide a tabbed document ui similar to that of Visual Studio.
| Visual Basic | Copy Code |
|---|
Imports Infragistics.Windows.DockManager
Private Sub InitializeDockManager(ByVal dockManager As XamDockManager)
Dim splitLeft As New SplitPane()
XamDockManager.SetInitialLocation(splitLeft, InitialPaneLocation.DockedLeft)
splitLeft.SplitterOrientation = Orientation.Horizontal
Dim cpLeftUnpinned As New ContentPane()
cpLeftUnpinned.Header = "TreeView"
cpLeftUnpinned.IsPinned = False
cpLeftUnpinned.Content = New TreeView()
splitLeft.Panes.Add(cpLeftUnpinned)
Dim cpLeftPinned As New ContentPane()
Dim tb As New CheckBox()
tb.Content = "Toggle"
cpLeftPinned.Header = "Toggle"
cpLeftPinned.Content = tb
splitLeft.Panes.Add(cpLeftPinned)
Dim splitBottom As New SplitPane()
XamDockManager.SetInitialLocation(splitBottom, InitialPaneLocation.DockedBottom)
splitBottom.SplitterOrientation = Orientation.Vertical
Dim cpBottomText As New ContentPane()
cpBottomText.Header = "TextBox"
cpBottomText.Content = New TextBox()
splitBottom.Panes.Add(cpBottomText)
Dim cpBottomList As New ContentPane()
cpBottomList.Header = "ListView"
cpBottomList.Content = New ListView()
splitBottom.Panes.Add(cpBottomList)
Dim splitFloating As New SplitPane()
XamDockManager.SetInitialLocation(splitFloating, InitialPaneLocation.DockableFloating)
XamDockManager.SetFloatingLocation(splitFloating, New Point(100, 100))
XamDockManager.SetFloatingSize(splitFloating, New Size(350, 200))
Dim tgpFloating As New TabGroupPane()
Dim cpRichText As New ContentPane()
cpRichText.Header = "RichText"
cpRichText.Content = New RichTextBox()
tgpFloating.Items.Add(cpRichText)
Dim cpCheck As New ContentPane()
cpCheck.Header = "CheckBox"
cpCheck.Content = New CheckBox()
tgpFloating.Items.Add(cpCheck)
splitFloating.Panes.Add(tgpFloating)
dockManager.Panes.Add(splitLeft)
dockManager.Panes.Add(splitBottom)
dockManager.Panes.Add(splitFloating)
Dim dch As New DocumentContentHost()
Dim splitDch As New SplitPane()
Dim tgpDch As New TabGroupPane()
Dim cpText As New ContentPane()
cpText.Header = "TextBox"
cpText.Content = New TextBox()
tgpDch.Items.Add(cpText)
Dim cpButton As New ContentPane()
Dim btnInDch As New Button()
btnInDch.Content = "Button"
cpButton.Header = "Button"
cpButton.Content = btnInDch
tgpDch.Items.Add(cpButton)
splitDch.Panes.Add(tgpDch)
dch.Panes.Add(splitDch)
dockManager.Content = dch
End Sub
|
| C# | Copy Code |
|---|
using Infragistics.Windows.DockManager;
private void InitializeDockManager(XamDockManager dockManager)
{
// Left dock area with unpinned pane and pinned pane
SplitPane splitLeft = new SplitPane();
XamDockManager.SetInitialLocation(splitLeft, InitialPaneLocation.DockedLeft);
splitLeft.SplitterOrientation = Orientation.Horizontal;
ContentPane cpLeftUnpinned = new ContentPane();
cpLeftUnpinned.Header = "TreeView";
cpLeftUnpinned.IsPinned = false;
cpLeftUnpinned.Content = new TreeView();
splitLeft.Panes.Add(cpLeftUnpinned);
ContentPane cpLeftPinned = new ContentPane();
CheckBox tb = new CheckBox();
tb.Content = "Toggle";
cpLeftPinned.Header = "Toggle";
cpLeftPinned.Content = tb;
splitLeft.Panes.Add(cpLeftPinned);
// Bottom dock area with vertical split
SplitPane splitBottom = new SplitPane();
XamDockManager.SetInitialLocation(splitBottom, InitialPaneLocation.DockedBottom);
splitBottom.SplitterOrientation = Orientation.Vertical;
ContentPane cpBottomText = new ContentPane();
cpBottomText.Header = "TextBox";
cpBottomText.Content = new TextBox();
splitBottom.Panes.Add(cpBottomText);
ContentPane cpBottomList = new ContentPane();
cpBottomList.Header = "ListView";
cpBottomList.Content = new ListView();
splitBottom.Panes.Add(cpBottomList);
// Floating dockable split pane
SplitPane splitFloating = new SplitPane();
XamDockManager.SetInitialLocation(splitFloating, InitialPaneLocation.DockableFloating);
XamDockManager.SetFloatingLocation(splitFloating, new Point(100, 100));
XamDockManager.SetFloatingSize(splitFloating, new Size(350, 200));
TabGroupPane tgpFloating = new TabGroupPane();
ContentPane cpRichText = new ContentPane();
cpRichText.Header = "RichText";
cpRichText.Content = new RichTextBox();
tgpFloating.Items.Add(cpRichText);
ContentPane cpCheck = new ContentPane();
cpCheck.Header = "CheckBox";
cpCheck.Content = new CheckBox();
tgpFloating.Items.Add(cpCheck);
splitFloating.Panes.Add(tgpFloating);
// note, the order in which the panes are defined/added
// affects their position within the dockmanager. those
// defined first will be positioned closer first and will
// be closer to the outer edge of the dockmanager
dockManager.Panes.Add(splitLeft);
dockManager.Panes.Add(splitBottom);
dockManager.Panes.Add(splitFloating);
// XamDockManager is a ContentControl so the content can be
// anything but use a DocumentContentHost to include a VS
// like tabbed document interface that can participate in
// the docking
DocumentContentHost dch = new DocumentContentHost();
// a document content host contains 1 or more split panes
SplitPane splitDch = new SplitPane();
// those split panes can only contain a tabgrouppane
TabGroupPane tgpDch = new TabGroupPane();
ContentPane cpText = new ContentPane();
cpText.Header = "TextBox";
cpText.Content = new TextBox();
tgpDch.Items.Add(cpText);
ContentPane cpButton = new ContentPane();
Button btnInDch = new Button();
btnInDch.Content = "Button";
cpButton.Header = "Button";
cpButton.Content = btnInDch;
tgpDch.Items.Add(cpButton);
splitDch.Panes.Add(tgpDch);
dch.Panes.Add(splitDch);
dockManager.Content = dch;
} |
| XAML | Copy Code |
|---|
<igDock:XamDockManager> <!-- The Panes collection is collection used to create the root split pane that contain the floating, docked and unpinned content panes --> <igDock:XamDockManager.Panes> <!-- note, the order in which the panes are defined/added affects their position within the dockmanager. those defined first will be positioned closer first and will be closer to the outer edge of the dockmanager --> <!-- Left dock area with unpinned pane and pinned pane --> <igDock:SplitPane igDock:XamDockManager.InitialLocation="DockedLeft" SplitterOrientation="Horizontal"> <!-- Unpinned pane --> <igDock:ContentPane Header="TreeView" IsPinned="False"> <TreeView /> </igDock:ContentPane> <igDock:ContentPane Header="Toggle"> <ToggleButton Content="Toggle" /> </igDock:ContentPane> </igDock:SplitPane> <!-- Bottom dock area with vertical split --> <igDock:SplitPane igDock:XamDockManager.InitialLocation="DockedBottom" SplitterOrientation="Vertical"> <igDock:ContentPane Header="TextBox"> <TextBox/> </igDock:ContentPane> <igDock:ContentPane Header="ListView"> <ListView/> </igDock:ContentPane> </igDock:SplitPane>
<!-- Floating dockable split pane --> <igDock:SplitPane igDock:XamDockManager.InitialLocation="DockableFloating" igDock:XamDockManager.FloatingLocation="100, 100" igDock:XamDockManager.FloatingSize="350,200"> <igDock:TabGroupPane> <igDock:ContentPane Header="RichText"> <RichTextBox /> </igDock:ContentPane> <igDock:ContentPane Header="CheckBox"> <CheckBox /> </igDock:ContentPane> </igDock:TabGroupPane> </igDock:SplitPane> </igDock:XamDockManager.Panes>
<!-- XamDockManager is a ContentControl so the content can be anything but use a DocumentContentHost to include a VS like tabbed document interface that can participate in the docking --> <igDock:DocumentContentHost> <!-- a document content host contains 1 or more split panes --> <igDock:SplitPane> <!-- those split panes can only contain a tabgrouppane --> <igDock:TabGroupPane> <igDock:ContentPane Header="TextBox"><TextBox /></igDock:ContentPane> <igDock:ContentPane Header="Button"><Button Content="Button" /></igDock:ContentPane> </igDock:TabGroupPane> </igDock:SplitPane> </igDock:DocumentContentHost> </igDock:XamDockManager>
|
See Also