Save/Load the Content of the Panes
This tutorial will walk you through the common tasks of saving the content of the panes.
RadDocking cannot save the Content of the panes itself. It only remembers the properties of the panes, the groups and the split containers and the way they are changed.
Tha Save/Load layout mechanism matches the SerializationTag of the saved pane with the SerializationTag of the pane that is already created. It works for the static panes, because when your application loads, the XAML parser creates correctly all the static panes and their contents. The dynamic panes are created by the RadDocking control and it doesn't know what content to put in them.
When a ToolWindow, PaneGroup or SplitContainer instance is auto-generated by the RadDocking in order to set the SerializationTag for these elements the ToolWindowCreated, PaneGroupCreated and SplitContainerCreated could be handled. Inside them the newly created instance could be found and SerializationTag could be set to them as demonstrated in Example 1:
Example 1: Setting SerializationTag
private void radDocking_PaneGroupCreated(object sender, Telerik.Windows.Controls.Docking.ElementCreatedEventArgs e)
{
var newGroup = e.CreatedElement as RadPaneGroup;
if (newGroup != null && RadDocking.GetSerializationTag(newGroup) == null)
{
RadDocking.SetSerializationTag(newGroup, "CustomSerializationTag");
}
}
Example 2: RadDocking declaration
<telerik:RadDocking x:Name="radDocking">
<telerik:RadSplitContainer>
<telerik:RadPaneGroup x:Name="Group1"
telerik:RadDocking.SerializationTag="Group1">
<telerik:RadPane Header="static pane 1"
telerik:RadDocking.SerializationTag="staticpane1">
<TextBox Text="Some content" />
</telerik:RadPane>
</telerik:RadPaneGroup>
</telerik:RadSplitContainer>
</telerik:RadDocking>
You can save the panes' content by handling the ElementLoaded event of the RadDocking control and setting the content of the newly created pane yourself.
Attach to the ElementLoaded event of the RadDocking element.
Example 3: Attaching to the ElementLoaded event
<telerik:RadDocking x:Name="radDocking1" ElementLoaded="radDocking_ElementLoaded">
Example 4: Get Content of Pane
private void radDocking_ElementLoaded(object sender, Telerik.Windows.Controls.LayoutSerializationEventArgs e)
{
var pane = e.AffectedElement as RadPane;
if (pane != null)
{
pane.Content = this.GetPaneContent(e.AffectedElementSerializationTag);
}
}
Private Sub radDocking_ElementLoaded(ByVal sender As Object, ByVal e As Telerik.Windows.Controls.LayoutSerializationLoadingEventArgs)
Dim pane = TryCast(e.AffectedElement, RadPane)
If pane IsNot Nothing Then
pane.Content = Me.GetPaneContent(e.AffectedElementSerializationTag)
End If
End Sub
The GetPaneContent() method needs to be implemented with the specific user custom logic.