我们每天使用的许多软件都使用了可停靠式布局,可以方便的打开、关闭、收起、展开、移动选项卡。今天就来说明如何使用AvalonDock实现这种可停靠式布局。


AvalonDock安装

最新版本的AvalonDock类库包含在程序包Extended.Wpf.Toolkit中,属于Xceed旗下的一款产品。使用Nuget管理器搜索安装,最新版本是3.4.0。

除了AvalonDock,Extended.Wpf.Toolkit套件中还包含了Xceed.Wpf.DataGrid和Xceed.Wpf.Toolkit,有兴趣的 也可以了解下。

代码示例

        <avalon:DockingManager><avalon:DockingManager.Theme><avalon:MetroTheme></avalon:MetroTheme></avalon:DockingManager.Theme><avalon:LayoutRoot><avalon:LayoutPanel Orientation="Horizontal"><avalon:LayoutAnchorablePaneGroup DockMinWidth="240" FloatingWidth="240"><avalon:LayoutAnchorablePane x:Name="panelLeft"><avalon:LayoutAnchorable Title="Left1"></avalon:LayoutAnchorable><avalon:LayoutAnchorable Title="Left2"></avalon:LayoutAnchorable></avalon:LayoutAnchorablePane></avalon:LayoutAnchorablePaneGroup><avalon:LayoutPanel Orientation="Vertical"><avalon:LayoutDocumentPaneGroup><avalon:LayoutDocumentPane x:Name="panelTop"><avalon:LayoutDocument Title="Top1"></avalon:LayoutDocument><avalon:LayoutDocument Title="Top2"></avalon:LayoutDocument></avalon:LayoutDocumentPane></avalon:LayoutDocumentPaneGroup><avalon:LayoutAnchorablePaneGroup DockMinHeight="180" FloatingHeight="180"><avalon:LayoutAnchorablePane x:Name="panelBottom"><avalon:LayoutAnchorable Title="Bottom1"></avalon:LayoutAnchorable><avalon:LayoutAnchorable Title="Bottom2"></avalon:LayoutAnchorable><avalon:LayoutAnchorable Title="Bottom3"></avalon:LayoutAnchorable></avalon:LayoutAnchorablePane></avalon:LayoutAnchorablePaneGroup></avalon:LayoutPanel><avalon:LayoutAnchorablePaneGroup DockMinWidth="270" FloatingWidth="270"><avalon:LayoutAnchorablePane x:Name="panelRight" DockWidth="240" FloatingWidth="240"><avalon:LayoutAnchorable Title="Right1"></avalon:LayoutAnchorable><avalon:LayoutAnchorable Title="Right2"></avalon:LayoutAnchorable></avalon:LayoutAnchorablePane></avalon:LayoutAnchorablePaneGroup></avalon:LayoutPanel></avalon:LayoutRoot></avalon:DockingManager>

首先写段代码来看效果如何,结果就如同下图所示,可以自由的拖动、改变或停靠选项卡。

层级结构

结合上面的示例和官方文档的说明,使用AvalonDock时的页面元素结构大体如下:

各个类的说明如下:

名称 说明
DockingManager 停靠管理器,核心控件,负责管理浮动窗体、布局存储、恢复,样式主题等。在XAML中,是AvaDock元素的根节点。
LayoutRoot : 布局根节点,会完全占满DockingManager中的空间。包含四个属性,LeftSide,RightSide,TopSide,BottomSide,分别用于展示DockingManager中左右上下四个位置的内容,但初始状态为隐藏状态。另外两个属性FloatingWindows,Hidden分别为浮动窗体集合和隐藏窗体集合。当一个窗格浮动时,AvalonDock会将其从其所在组中删除,然后放置到FloatingWindows集合中。当一个窗格关闭时,会将其放置在Hidden集合中。
LayoutPanel 布局面板,LayoutRoot中的内容控件,完全占满LayoutRoot中的空间,可嵌套 ,可以设定Orientation 属性,控件布局组的浮动方向。实际的窗格都位于LayoutPanel节点下。
LayoutAnchorablePaneGroup 可停靠窗格组,是可停靠窗格LayoutAnchorablePane的容器。通过设置Orientation 属性,用于管理多个可停靠窗格的浮动方向。
LayoutAnchorablePane 可停靠窗格,浮动窗格是可停靠控件LayoutAnchorable的容器。一个窗格中,可以有多个可停靠控件。浮动窗格中的可停靠控件只能是LayoutAnchorable.窗格大小设定后,不能自动改变。
LayoutAnchorable 可停靠内容,一般放置在LayoutAnchorablePane中,其内容可以是用户自定义控件类型,比如,在UserControl中设置好WPF基础控件布局,然后将整个UserControl放置在LayoutAnchorable中,这样,整个UserControl内容就可以随着可停靠控件一起浮动或者停靠
LayoutDocumentPaneGroup 文档窗格组,是文档窗格LayoutDocumentPane的容器。通过设置Orientation 属性,用于管理多个文档窗格的浮动方向。
LayoutDocumentPane 文档窗格,与LayoutAnchorablePane类似,也是可停靠控件的容器,文档窗格类中可以放置可停靠控件LayoutAnchorable,也可以放置文档控件LayoutDocument,LayoutDocunemtPane会自动占满窗体的窗体布局中的剩余空间。
LayoutDocument 文档,与LayoutAnchorable功能类似,区别在于LayoutDoucument会随着LayoutDocumentPane一起占满窗体剩余空间。

其中DockingManager仅能包含一个LayoutRoot,而LayoutRoot仅能包含一个LayoutPanel,但LayoutPanel内能包含多个LayoutPanel并能多层嵌套。
此外LayoutAnchorablePaneGroup和LayoutDocumentPaneGroup也可以多层嵌套。
LayoutAnchorable和LayoutDocument内包含的就是实际内容了,可以是WPF控件或自定义控件。

了解了AvalonDock中各个元素的意义及用途,就能更加快速的规划自己的布局了。

WPF随笔(十)--使用AvalonDock实现可停靠式布局相关推荐

  1. WPF随笔(十四)--如何在MVVM模式下关闭窗口

    离上一篇WPF随笔有多久,再度编码WPF项目就有多久.机缘巧合又接下了一个开发WPF桌面程序的任务,又有机会详细研究之前一直忽略的细节. 今天就来谈谈如何在MVVM模式下关闭窗口. 什么?关闭窗口还要 ...

  2. WPF随笔(一)--UI框架MahApps.Metro的使用

    WPF随笔(一)--UI框架MahApps.Metro的使用 写在前面 WPF的界面特性 如何使用MahApps.Metro 如何使用MahApps.Metro模板 后记 写在前面 使用WPF开发窗体 ...

  3. 右键点“工作空间”窗口内空白部分,在弹出的菜单上勾选“Docking View / 停靠式”。然后双击程序窗口的窗棱,就是最上面那条蓝色边框

    VC++6.0的界面如何恢复 这里的每个界面都是突出的,如何恢复成下面这个图的样子?请各位指点一下,本人将感激不尽!...展开 右键点"工作空间"窗口内空白部分,在弹出的菜单上勾选 ...

  4. 全球及中国软件外包行业“十四五”展望发展建议及创新布局战略报告2021-2027年

    全球及中国软件外包行业"十四五"展望发展建议及创新布局战略报告2021-2027年 [修订日期]:2021年10月 [搜索鸿晟信合研究院查看官网更多内容!]  第一章 软件外包相关 ...

  5. Android基础知识(二十):Notification、提醒式通知(横幅)踩坑与通知界面设置跳转

    Android基础知识(二十):Notification.提醒式通知(横幅)踩坑与通知界面设置跳转 一.Notification通知与基本用法 通知Notification是Android系统中比较有 ...

  6. 示例:应用WPF开发的仿制百度网盘客户端UI布局

    一.目的: 应用WPF做的仿制百度网盘客户端UI布局页面,仅供参考 二.环境: .Net Framework 4.5 三.示例: 原图: 实现效果图: 未完待续... 四.下载地址 https://g ...

  7. html响应式布局的概念,HTMLCSS学习笔记(十八)响应式布局概念

    原标题:HTMLCSS学习笔记(十八)响应式布局概念 常见的布局方案 固定布局:以像素作为页面的基本单位,不管设备屏幕及浏览器宽度,只设计一套尺寸: 可切换的固定布局:同样以像素作为页面单位,参考主流 ...

  8. 闲话WPF之十五(WPF的数据处理 [2])

    在上一个Post当中,我叙述了WPF中的数据绑定相关的一堆理论知识.现在,我们将对其中的某些方面通过实例做进一步的分析. 在介绍WPF数据绑定源的种类时,第一种就是任意的CLR对象.这里需要注意的是W ...

  9. 闲话WPF之十(Dependency属性 [2] )

    在前一个Post中,曾提到将要重点研究Dependency属性的三个方面:变化通知:属性值的继承:支持多个提供对象.下面,我将分别就这三个内容进行简单地说明. [变化通知] 在任何时候,只要Depen ...

  10. 闲话WPF之十八(WPF中的资源 [4] )

    在前一个Post当中,我从资源编译行为的角度讨论了WPF中的资源.但是,不管是Resource还是Content都是在编译时声明资源.如果我们打破这个限制,不希望指定完全确认的资源地址.WPF提供了一 ...

最新文章

  1. openresty 前端开发序
  2. 在代码中设置RelativeLayout布局中标签的android:layout_toLeftOf、android:layout_toRightOf等属性...
  3. Linux之tcpdump
  4. 传阿里旗下蚂蚁集团拟上市集资300亿美元,最快9月IPO
  5. workbench拓扑优化教程_workbenchds拓扑优化分析.ppt
  6. 前景检测算法(一)--综述
  7. SpringMVC文件上传(一)
  8. 如何用小程序玩转裂变?你要的小程序裂变营销都在这里
  9. matlab画不定积分图像实例,matlab怎么画函数图像,原来是这样的
  10. 【通信】基于OFDMA系统的多用户资源分配求解论附文和MATLAB代码
  11. SecureCRT连接后乱码问题!!!
  12. AES加密c语言实现
  13. label 标签属性的总结归纳
  14. 图片传输中的转码问题
  15. 公链求生记:我要干外包
  16. 2.写一个WebDriver脚本
  17. 小符MYSQL的笔记
  18. 蓝桥杯刷题021——填字母游戏(DFS)
  19. 看得见的实力!传智教育「智能机器人软件开发」课程,打造新型互联网人才!
  20. Visual C++ 使用x64编译器

热门文章

  1. PHP - 主流开发框架 - 介绍
  2. 海康大华PC客户端集成播放器
  3. 浅析HashMap底层原理
  4. 破解密码——利用Windows PE操作系统破解Windows PIN
  5. ResNet网络结构解析
  6. er ubnt x设置教程_ubnt edgerouter er-x 路由器怎么设置
  7. UCOSIII实时操作系统
  8. 华为 GaussDB 首席架构师 武新离职,出任易鲸捷CEO
  9. oracle awr报告提取,Oracle AWR报告提取方法
  10. Pygame教程系列二:MoviePy视频播放篇