简介

Krypton Docking 模块提供类似 Visual Studio 的专业停靠窗口系统。它允许用户将面板拖拽到窗体的上下左右边缘进行停靠、在中央区域以选项卡形式堆叠、或作为浮动窗口独立显示。该模块构建在 Krypton Workspace 之上,是构建 IDE 风格界面的核心组件。

注意:Docking 模块尚未被 LCode 工具箱集成,无法通过设计器拖放使用。需要在项目中手动添加对 Krypton.Docking.dll 的引用,并通过代码创建和管理停靠面板。
Docking 示例截图
Krypton Docking 实现的多面板停靠布局

核心类

类名说明
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 中包含以下示例:

相关模块