一、演示概述


此演示展示了如何通过RadDocking控件自身所提供的SaveLayout()保存布局信息,以及通过LoadLayout()方法来加载布局信息。如此一来,就可以将用户自定义的布局信息持久化保存到文件中,当用户再次打开应用时,可将布局完好如初的恢复显示。


相关下载(屏幕录像)

http://pan.baidu.com/s/1gd6DwDt


在线播放

http://v.youku.com/v_show/id_XODcyNjE0Mjg4.html




二、运行效果


效果如下图所示:


[Telerik]RadDocking第02篇 保存和加载RadDocking的布局_持久化



三、关键代码
1、保存布局的代码

/// <summary>
/// 将RadDocking的布局信息转换为字符串。
/// </summary>
/// <returns></returns>
private string SaveLayoutAsString()
{
	MemoryStream stream = new MemoryStream();
	this.RadDocking.SaveLayout(stream);


	stream.Seek(0, SeekOrigin.Begin);


	StreamReader reader = new StreamReader(stream);
	return reader.ReadToEnd();
}



2、加载布局的代码


/// <summary>
/// 从字符串中加载RadDocking的布局信息。
/// </summary>
/// <param name="xml"></param>
private void LoadLayoutFromString(string xml)
{
	using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
	{
		stream.Seek(0, SeekOrigin.Begin);
		this.RadDocking.LoadLayout(stream);
	}
}



3、持久化生成的XML


RadDocking的布局持久化生成的字符串,也即为一个XML,内容大致如下所示:


<?xml version="1.0" encoding="utf-8"?>
<RadDocking>
  <DocumentHost>
    <RadSplitContainer>
      <Items>
        <RadPaneGroup SelectedIndex="0">
          <Items>
            <RadPane SerializationTag="LayoutXml"
                     IsDockable="True"
                     Header="Layout Xml" />
            <RadDocumentPane SerializationTag="DocumentPane"
                             IsDockable="True"
                             Title="Document 1"
                             Header="Document 1" />
          </Items>
        </RadPaneGroup>
      </Items>
    </RadSplitContainer>
  </DocumentHost>
  <SplitContainers>
    <RadSplitContainer Dock="DockedLeft"
                       Width="240">
      <Items>
        <RadPaneGroup SelectedIndex="0">
          <Items>
            <RadPane SerializationTag="PaneLeft1"
                     IsDockable="True"
                     Header="Pane Left 1" />
            <RadPane SerializationTag="PaneLeft2"
                     IsDockable="True"
                     Header="Pane Left 2" />
            <RadPane SerializationTag="PaneLeft3"
                     IsDockable="True"
                     Header="Pane Left 3" />
            <RadPane SerializationTag="PaneLeft4"
                     IsDockable="True"
                     Header="Pane Left 4" />
          </Items>
        </RadPaneGroup>
      </Items>
    </RadSplitContainer>
    <RadSplitContainer Dock="DockedRight"
                       Width="240">
      <Items>
        <RadPaneGroup SelectedIndex="0">
          <Items>
            <RadPane SerializationTag="PaneRight1"
                     IsDockable="True"
                     Header="Pane Right 1" />
          </Items>
        </RadPaneGroup>
      </Items>
    </RadSplitContainer>
    <RadSplitContainer Dock="DockedTop"
                       Height="180">
      <Items>
        <RadPaneGroup SelectedIndex="0">
          <Items>
            <RadPane SerializationTag="PaneTop1"
                     IsDockable="True"
                     Header="Pane Top 1" />
          </Items>
        </RadPaneGroup>
      </Items>
    </RadSplitContainer>
  </SplitContainers>
</RadDocking>