Docking 模块 ⚠ LCode 未集成 Docking
命名空间:Krypton.Docking · 程序集:Krypton.Docking.dll
简介
Krypton Docking 模块提供类似 Visual Studio 的专业停靠窗口系统。它允许用户将面板拖拽到窗体的上下左右边缘进行停靠、在中央区域以选项卡形式堆叠、或作为浮动窗口独立显示。该模块构建在 Krypton Workspace 之上,是构建 IDE 风格界面的核心组件。
注意:Docking 模块尚未被 LCode 工具箱集成,无法通过设计器拖放使用。需要在项目中手动添加对
Krypton.Docking.dll 的引用,并通过代码创建和管理停靠面板。
核心类
| 类名 | 说明 |
|---|---|
KryptonDockingManager | 停靠管理器,整个 Docking 系统的核心控制器。负责管理所有停靠面板的生命周期、布局、拖拽和持久化。 |
KryptonDockableWorkspace | 可停靠工作区,作为中央内容区域(类似 VS 的文档编辑区)。继承自 KryptonWorkspace,面板可在此区域以选项卡形式堆叠。 |
KryptonDockableNavigator | 可停靠导航器,将 KryptonNavigator 与 Docking 系统集成,使导航页面支持拖拽和停靠。 |
KryptonDockableFloatingWindow | 可停靠浮动窗口,表示从主窗体分离出来的浮动面板容器。 |
KryptonDockingControl | 停靠控件包装器,将普通 Control 包装为可停靠的面板。 |
KryptonDockingAutoHiddenGroup | 自动隐藏组,管理边缘自动隐藏(AutoHide)的面板集合。 |
KryptonStorePage | 存储页面,用于持久化时保存面板状态信息。 |
停靠位置
| DockingEdge 枚举 | 说明 |
|---|---|
DockingEdge.Left | 停靠到窗体左边缘(类似 VS 的工具箱) |
DockingEdge.Right | 停靠到窗体右边缘(类似 VS 的属性窗口) |
DockingEdge.Top | 停靠到窗体上边缘 |
DockingEdge.Bottom | 停靠到窗体下边缘(类似 VS 的输出窗口) |
快速上手
在 LCode 中手动添加引用
// 1. 在项目中添加引用:
// - Krypton.Docking.dll
// - Krypton.Workspace.dll(Docking 依赖 Workspace)
// - Krypton.Navigator.dll
// - Krypton.Toolkit.dll
// 2. 在 .csproj 中确认引用(LCode 项目):
// <Reference Include="Krypton.Docking">
// <HintPath>..\packages\Krypton.Docking.dll</HintPath>
// </Reference>
基本 Docking 布局(代码创建)
using Krypton.Docking;
using Krypton.Navigator;
using Krypton.Workspace;
// 创建停靠管理器
var dockingManager = new KryptonDockingManager();
// 创建中央工作区(文档区域)
var workspace = new KryptonDockableWorkspace();
workspace.Dock = DockStyle.Fill;
this.Controls.Add(workspace);
// 初始化 Docking 系统
dockingManager.ManageWorkspace(workspace);
dockingManager.ManageControl(this, workspace);
// 创建左侧面板(类似工具箱)
var pageToolbox = new KryptonPage("工具箱", "工具箱", "");
pageToolbox.UniqueName = "ToolboxPanel";
pageToolbox.ImageSmall = Properties.Resources.toolbox_icon;
var treeToolbox = new KryptonTreeView();
treeToolbox.Dock = DockStyle.Fill;
pageToolbox.Controls.Add(treeToolbox);
// 停靠到左边缘
dockingManager.AddDockspace("Left", DockingEdge.Left,
new KryptonPage[] { pageToolbox });
// 创建底部面板(类似输出窗口)
var pageOutput = new KryptonPage("输出", "输出", "");
pageOutput.UniqueName = "OutputPanel";
var txtOutput = new KryptonRichTextBox();
txtOutput.Dock = DockStyle.Fill;
pageOutput.Controls.Add(txtOutput);
dockingManager.AddDockspace("Bottom", DockingEdge.Bottom,
new KryptonPage[] { pageOutput });
// 在中央工作区添加文档页面
var pageDoc = new KryptonPage("Program.cs", "文档", "");
pageDoc.UniqueName = "Document1";
workspace.Root.Children.Add(pageDoc);
布局持久化(保存/恢复)
// 保存布局到 XML 文件
dockingManager.SaveConfigToFile("layout.xml");
// 从 XML 文件恢复布局
dockingManager.LoadConfigFromFile("layout.xml");
// 也可以保存到流
using (var stream = new FileStream("layout.xml", FileMode.Create))
{
dockingManager.SaveConfigToStream(stream);
}
进阶用法
自动隐藏(AutoHide)
// 将面板设为自动隐藏模式(收缩到边缘,鼠标悬停时弹出)
dockingManager.SetAutoHidden("ToolboxPanel");
// 从自动隐藏恢复为正常停靠
dockingManager.SetDocked("ToolboxPanel");
浮动窗口
// 将面板转为浮动窗口
dockingManager.SetFloating("OutputPanel");
// 创建独立的浮动窗口并添加面板
var floatingWindow = new KryptonDockableFloatingWindow();
var pageFloat = new KryptonPage("监视", "监视窗口", "");
floatingWindow.Pages.Add(pageFloat);
floatingWindow.Show();
面板可见性控制
// 隐藏面板
dockingManager.HidePage("ToolboxPanel");
// 显示面板
dockingManager.ShowPage("ToolboxPanel");
// 检查面板是否可见
bool isVisible = dockingManager.ContainsPage("ToolboxPanel");
对应示例项目
📁 Source/Krypton Docking Examples/
Demos 中包含以下示例:
Standard Docking— 标准停靠布局(上下左右 + 中央文档区)Docking Flags— 各种 DockingFlags 配置效果Docking Persistence— 布局保存与恢复(XML 持久化)Multi Control Docking— 多控件协同停靠External Drag To Docking— 从外部拖拽到停靠区域Navigator + FloatingWindows— Navigator 与浮动窗口结合Docking Customized— 自定义外观和行为