界面布局控件-WeifenLuo.WinFormsUI.Docking
2010-11-30 11:01 lppcoding 阅读(7617) 评论(22) 编辑 收藏 举报WeifenLuo.WinFormsUI.Docking是一个很强大的界面布局控件,可以保存自定义的布局为XML文件,可以加载XML配置文件.!
先看一下效果
使用说明:
1.新建一个WinForm程序,创建4个窗体,FrmMain,窗口1,窗口2,窗口3
2.工具箱->选择项->浏览 选择WeifenLuo.WinFormsUI.Docking.dll动态库, 确定后,工具箱中会多出一个DockPanel控件
3.FrmMain窗体设置为MDI窗体, 即IsMdiContainer属性设置为True,拖入一个DockPanel控件,Dock属性设置为Fill
4.在解决方案中添加引用WeifenLuo.WinFormsUI.Docking.dll,窗口1,窗口2,窗口3中都引入命名空间using WeifenLuo.WinFormsUI.Docking;
把默认继承的Form去掉,全部继承DockContent类
using WeifenLuo.WinFormsUI.Docking; namespace WeiFenLuoDockPanel { public partial class Form1 : DockContent { public Form1() { InitializeComponent(); } } }
继承DockContent类后,窗体会多出一部分属性,其实列举几个常用的属性
CloseButton :指示是否启用关闭按钮,默认为True
CloseButtonVisible:是否显示关闭按钮,默认为True
ShowHint:设置窗体显示的初始位置
TabText:Tab标签上显示的文字,这个与Form的TEXT不同,当窗体显示到布局控件上时,FORM的TEXT是不会显示的
5.准备工作做好了,接写来该如何把窗体Show出来呢?在FrmMain窗体中添加如下字段.
private Form1 f1 = new Form1(); private Form2 f2 = new Form2(); private Form2 f3 = new Form3();
在Load事件中添加如下代码
f1.Show(dockPanel1); f2.Show(dockPanel1); f3.Show(dockPanel1);
Ok, Ctrl+F5一把..效果如下
(PS:可能有人会问,如何控制每个窗体显示的位置呢 ? 其实就是上面提到的ShowHint属性来控制)
保存XML配置文件
如果在程序使用过程中,操作人改变了布局样式,且想以后都继续保持那样的样式,那我们就要用到SaveAsXml这个方法了
dockPanel1.SaveAsXml(Path.Combine(Application.StartupPath, "CustomUI.xml"));
SaveAsXml方法有四种重载方式,其中最简单的一种就是带一个字符串参数的那种,参数为XML文件的存放路径,,,
此XML文件中保存的就是一些布局参数,有兴趣的童鞋可以打开详细看看...
加载XML配置文件
如果想利用保存的布局样式,就需要加载保存的XML配置文件,
LoadFromXml方法用来加载配置..
原型:DockPanel.LoadFromXml(string fileName,DeserializeDockContent deserializeContent)
fileName 文件名
DeserializeDockContent是一个委托,在WeifenLuo.WinFormsUI.Docking命名空间中,此委托用来序列化配置文件中布局窗体的实例,
看代码,,
string uiFile = Path.Combine(Application.StartupPath, "CustomUI.xml"); if (File.Exists(uiFile)) { DeserializeDockContent ddContent = new DeserializeDockContent(GetContentFromPersistString); dockPanel1.LoadFromXml(uiFile,ddContent); }
#region 加载布局 private IDockContent GetContentFromPersistString(string persistString) { try { if (persistString == typeof(Form1).ToString()) { return new Form1(); } if (persistString == typeof(Form2).ToString()) { return new Form2(); } if (persistString == typeof(Form3).ToString()) { return new Form3(); } } catch (Exception ex) { Console.WriteLine(persistString); } throw new Exception(); } #endregion