您的位置:首页 > 产品设计 > UI/UE

WeifenLuo.WinFormsUI.Docking小应用

2014-04-22 18:00 393 查看
要用 WeifenLuo.WinFormsUI.Docking 首先要下载: WeifenLuo.WinFormsUI.Docking 。

在当前工程“解决方案 - 引用”中 >> 右击引用 >> 浏览 >> 找到你存放的 WeifenLuo.WinFormsUI.Docking
添加。

主窗体的 this.IsMdiContainer
=true; //设置主窗体为多文档窗体。

建议先复制到当前工程的 \bin\Debug 文件夹中。。。

dockPanel1.DocumentStyle =DocumentStyle.DockingSdi ;


DocumentStyle属性有四种形式:用的时候好像没有什么区别,不过DockingSdi
还是有点区别

DockingMdi 子窗体停靠在中间时,标签栏右侧显示小三角和关闭钮。

DockingWindow
子窗体停靠在中间时,标签栏右侧显示小三角和关闭钮。(感觉和DockingMdi相似)

DockingSdi 单个子窗体停靠在中间时,将没有标签栏

SystemMdi
子窗体停靠在中间时,会报错(停靠状态无效)。(XX.Show(this.dockPanel1,DockState.Document); ) (XX=子窗体名)



拖动后的效果:



在主窗体中工具箱中加入 dockPanel

.






右击工具箱中的工具标题 >>选择项>> 在弹出的对话框中( 选择浏览>>找到你存放WeifenLuo.WinFormsUI.Docking的位置>>选择 - 打开>>确定)....这样,你就可以在工具栏中看到 DockPanel控件

主窗体:双击DockPanel 或拖入窗体中,设置你的DockPanel...Anchor属性:
Top, Bottom, Left, Right, Size属性:XXX,XXX(X=数字,设置你要的大小) 当然,你也可以在Dock属性:Fill

/// <summary> 加载窗体停靠 </summary>
private void LoadDock()
{
this.IsMdiContainer = true;
dockPanel1.DocumentStyle = DocumentStyle.DockingSdi;
Form2 Treev = new Form2();  //↘
Form3 Listv = new Form3();   //  实例化子窗体
Form4 Richt = new Form4();  //↗
Treev.Show(this.dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeftAutoHide);//停靠左侧收起
Listv.Show(this.dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeftAutoHide);//停靠左侧收起

Richt.Show(this.dockPanel1, DockState.Document);  // Document 停靠中间
}
#region =★=*=★=*=★= 加载与保存 布局 =★=*=★=*=★=
/// <summary> 保存布局 </summary>
private void SaveBock()
{
string uiFile = Path.Combine(Application.StartupPath, "CustomUI.xml");
dockPanel1.SaveAsXml(uiFile);
}
/// <summary> 加载布局 </summary>
private void LoadBock()
{
string uiFile = Path.Combine(Application.StartupPath, "CustomUI.xml");
if (File.Exists(uiFile))
{
WeifenLuo.WinFormsUI.Docking.DeserializeDockContent ddContent =
new WeifenLuo.WinFormsUI.Docking.DeserializeDockContent(GetContentFromPersistString);
dockPanel1.LoadFromXml(uiFile, ddContent);
}
}
/// <summary>
/// 加载布局
/// </summary>
/// <param name="persistString"></param>
/// <returns></returns>
private IDockContent GetContentFromPersistString(string persistString)
{
try
{
if (persistString == typeof(Form2).ToString())
{
return new Form2();
}
if (persistString == typeof(Form3).ToString())
{
return new Form3();
}
if (persistString == typeof(Form4).ToString())
{
return new Form4();
}
}
catch (Exception)
{
Console.WriteLine(persistString);
}
throw new Exception();
}
#endregion
//窗体加载
private void Form1_Load(object sender, EventArgs e)
{
this.IsMdiContainer = true;
if (!File.Exists(@"CustomUI.xml"))  /* 如果工程里没有指定的XML文档,则调用默认的布局,否则调用保存的布局 */
{
this.LoadDock();
}
else { this.LoadBock(); }
}
/* 退出前,保存布局 */
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//this.SaveBock();
}


当不小心把停靠窗体关闭后,应该在主窗体写一个调出子窗体的点击事件....

要实现各个dockpanle子窗体之间的互动,例如,vs编辑器中,设计界面的时候,选择一个文本框,属性框中的属性随之改变,使用委托可以解决

限定子窗体停靠位置:

#region DockAreas属性:设置允许子窗体停靠位置
/// <summary>可以停靠在 dockPanel 上下左右四个位置,
/// 但不允许子窗体停靠在 dockPanel 中间
/// </summary>
private void DockNum4()
{
this.DockAreas = ((WeifenLuo.WinFormsUI.Docking.DockAreas)
(((((WeifenLuo.WinFormsUI.Docking.DockAreas.Float
| WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft)
| WeifenLuo.WinFormsUI.Docking.DockAreas.DockRight)
| WeifenLuo.WinFormsUI.Docking.DockAreas.DockTop)
| WeifenLuo.WinFormsUI.Docking.DockAreas.DockBottom)
));
}
/// <summary>
/// 可以停靠在 dockPanel 上下左右中 五个位置
/// </summary>
private void DockNum5()
{
this.DockAreas = ((WeifenLuo.WinFormsUI.Docking.DockAreas)
((((((WeifenLuo.WinFormsUI.Docking.DockAreas.Float
| WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft)
| WeifenLuo.WinFormsUI.Docking.DockAreas.DockRight)
| WeifenLuo.WinFormsUI.Docking.DockAreas.DockTop)
| WeifenLuo.WinFormsUI.Docking.DockAreas.DockBottom)
| WeifenLuo.WinFormsUI.Docking.DockAreas.Document)  /* 允许子窗体停靠中间 */
));
}
#endregion


子窗体:

添加子窗体, using WeifenLuo.WinFormsUI.Docking;
using WeifenLuo.WinFormsUI.Docking;
public partial class Form2 :DockContent  //把继承修改为 DockContent .


CloseButton属性:子窗体在 dockPanel
中,标签中关闭钮是否起作用,true起作用

AutoHidePortion属性:
子窗体在 dockPanel 中,伸缩状态时高(或宽)的比例 0.25 X 100% = 25%

在dockPanel
中,Dock(Top,Right...)Portion ,在子窗体固定时,显示靠边时的宽(或高)比例 0.25 X 100% = 25%

子窗体与子窗体间的传值可以用委托进行传递,在子窗体声明委托,在主窗体调用委托即可!!









内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: