界面布局控件-WeifenLuo.WinFormsUI.Docking

WeifenLuo.WinFormsUI.Docking是一个强大的WinForm界面布局控件,支持XML保存和加载自定义布局。通过设置窗体属性如CloseButton、CloseButtonVisible、ShowHint和TabText,可以实现灵活的界面设计。在FrmMain窗体中引入DockPanel,将其他窗体继承自DockContent类,并利用LoadFromXml和SaveAsXml方法保存及加载布局配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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类

 
01using WeifenLuo.WinFormsUI.Docking;
02
03namespace WeiFenLuoDockPanel
04{
05public partial class Form1 : DockContent
06{
07public Form1()
08{
09InitializeComponent();
10}
11}
12}

继承DockContent类后,窗体会多出一部分属性,其实列举几个常用的属性

CloseButton :指示是否启用关闭按钮,默认为True

CloseButtonVisible:是否显示关闭按钮,默认为True

ShowHint:设置窗体显示的初始位置

TabText:Tab标签上显示的文字,这个与Form的TEXT不同,当窗体显示到布局控件上时,FORM的TEXT是不会显示的

5.准备工作做好了,接写来该如何把窗体Show出来呢?在FrmMain窗体中添加如下字段.

 
1private Form1 f1 = new Form1();
2private Form2 f2 = new Form2();
3private Form2 f3 = new Form3();

在Load事件中添加如下代码

 
1f1.Show(dockPanel1);
2f2.Show(dockPanel1);
3f3.Show(dockPanel1);

Ok, Ctrl+F5一把..效果如下

(PS:可能有人会问,如何控制每个窗体显示的位置呢 ? 其实就是上面提到的ShowHint属性来控制)

保存XML配置文件

如果在程序使用过程中,操作人改变了布局样式,且想以后都继续保持那样的样式,那我们就要用到SaveAsXml这个方法了

 
1dockPanel1.SaveAsXml(Path.Combine(Application.StartupPath, "CustomUI.xml"));

SaveAsXml方法有四种重载方式,其中最简单的一种就是带一个字符串参数的那种,参数为XML文件的存放路径,,,

此XML文件中保存的就是一些布局参数,有兴趣的童鞋可以打开详细看看...

加载XML配置文件

如果想利用保存的布局样式,就需要加载保存的XML配置文件,

LoadFromXml方法用来加载配置..

原型:DockPanel.LoadFromXml(string fileName,DeserializeDockContent deserializeContent)

fileName 文件名

DeserializeDockContent是一个委托,在WeifenLuo.WinFormsUI.Docking命名空间中,此委托用来序列化配置文件中布局窗体的实例,

看代码,,

 
1string uiFile = Path.Combine(Application.StartupPath, "CustomUI.xml");
2if (File.Exists(uiFile))
3{
4DeserializeDockContent ddContent = new DeserializeDockContent(GetContentFromPersistString);
5dockPanel1.LoadFromXml(uiFile,ddContent);
6}
 
01#region 加载布局
02private IDockContent GetContentFromPersistString(string persistString)
03{
04try
05{
06if (persistString == typeof(Form1).ToString())
07{
08return new Form1();
09}
10if (persistString == typeof(Form2).ToString())
11{
12return new Form2();
13}
14if (persistString == typeof(Form3).ToString())
15{
16return new Form3();
17}
18}
19catch (Exception ex)
20{
21Console.WriteLine(persistString);
22}
23throw new Exception();
24}
25
26#endregion

控件下载

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值