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

2023-11-07

我们每天使用的许多软件都使用了可停靠式布局,可以方便的打开、关闭、收起、展开、移动选项卡。今天就来说明如何使用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中各个元素的意义及用途,就能更加快速的规划自己的布局了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 使用jupyter中的matplotlib库绘制简单图表

    使用matplotlib库绘制图表最重要的就需要导入numpy模块和pyplot模块 1 绘制直线图 plt title 2020080603012 import numpy as np import matplotlib pyplot a
  • Docker 中 MySQL容器时区不对,导致插入的时间不准确

    查询 MySQL 时区及当前时间 mysql gt show variables like zone Variable name Value system time zone UTC time zone SYSTEM 2 rows in s
  • AngularJs API

    b AngularJs API b 以下列出了一些通用的 API 函数 angular lowercase 转换字符串为小写angular uppercase 转换字符串为大写angular isString 判断给定的对象是否为字符串 如
  • OSI网络结构的七层模型--网络大典

    OSI开放式系统互联模型是1984年国际标准化组织 ISO 提出的一个参考模型 此模型作为网络通信的概念性标准框架 使通信在不同的制造商的设备和应用软件所形成的网络上的进行成为可能 现在此模型已成为一個主要的结构模型用于计算机之间和网络间的
  • RSA加密算法

    AVAEE项目中很多时候都需要对核心数据进行加密传输 采用非对称加密算法在前段对数据进行加密 在服务端进行解密是一个不错的方式 而常用的实现是采用RSA非对称加密方法 具体步骤为 1 在服务端用密码种子生成密钥对 保存密码种子 一个特定的密
  • Uncaught (in promise) Error: Request failed with status code 400错误记录

    前后端我都查遍了 发现都没有问题 原来问题错在输入的参数上面 对于这种问题 我们只需要在 要善于发现问题 请求的返回参数里面 就告诉了我们问题出在哪里 因为我输入的参数都是字符串 而存储的数据有时间和小数 参数不一致 组成的对象就会报错 谨
  • js逆向案例一二

    目录 零 概述 一 请求参数 Cookie Referer校验 1 案例1 有道翻译 2 案例2 百度翻译 二 参数响应加密解密AES DES RSA 1 案例3 建筑市场 AES 2 案例4 毛毛租 AES 3 案例5 翼龙登录 DES
  • 点击 地图时获取 点击位置的经纬度,以及地址信息 之 逆向地理编码

    目录 前言 效果图 前置配置工作 总代码 点击空白的位置打印经纬度 后续 搜索后通过点击点标记获取当前的经纬度 地区编码以及地址 补充 全部代码 小结 前言 之前以为 只要地图搜索功能实现 以及能把后端获取的数据渲染至页面 我就可以解放了
  • vba中filedialog用法

  • 软件测试的分类总结

    1 按阶段分 单元测试 集成测试 系统测试 验收测试 2 按是否运行程序划分 静态测试和动态测试 3 按是否查看代码划分 白盒测试 黑盒测试 灰盒测试 4 其他划分 兼容测试 安全性测试 回归测试 冒烟测试 随机测试 App测试 接口测试
  • 怎样给手机发送短信验证码

    1 首先你得去短信平台申请账户 我之前用的是梦网云短信平台 这里也是讲用梦网云短信平台发送短信 2 网址 http www monyun cn account new activity html B vid 1400037279266705
  • systemctl和service

    一直以为这两个功能是一样的 某些情况下systemctl比service功能还要强 但是工作中遇到了问题 在这里 用service操作libvirt bin 但是无法用systemctl处理 查阅资料 service其实是在 etc ini
  • python django 优势_那么多人选择Python,它的优势,缺点有哪些?

    提及到目前最火的编程语言 Python可谓是非常受欢迎的 属于四大编程语言之一 近些年来Python的增长趋势也是非常明显的 很多人都将Python作为入门的语言 对于很多人来说都会选择学习Python 那么Python究竟有何魔力呢 它的
  • 使用vue+electron创建桌面软件(二)

    文章目录 打包配置 界面配置 窗口配置 自定义顶部栏 vue electron项目 对软件进行配置 包括打包图标 名称等 自定义窗口最小化 全屏 退出软件 界面信息传递等 打包配置 在vue config js文件中 vue config
  • 射击小游戏c语言实验报告,C++实现简单射击小游戏

    使用c 制作简单的横板射击小游戏 供大家参考 具体内容如下 include include include class Bullet class Tank class E Bullet class Boss bool dead false
  • k8s-某视频课基础了解

    容器编排 Kubernetes Helm 容器引擎 Containerd Rocket 容器镜像仓库 TUF Harbor Notarv 容器网络CNI 服务网格 服务发现 CoreDNS Linkerd Envoy 容器监控运维 Prom
  • [Ubuntu]使用随机数完全格式化整块优盘

    系统对优盘等存储设备的快速格式化 只是做了简单的标记 如果没有进一步的写入操作 内容大概率都还能恢复找回 那个如何彻底的格式化掉一块优盘呢 使用 Ubuntu 我们可以对全盘进行写零或者写随机数操作 1 找到 U 盘路径 sudo fdis
  • 运维进阶:文件共享服务全攻略

    一 了解一下 1 NFS NFS Network File System 即网络文件系统 是FreeBSD支持的文件系统中的一种 它允许网络中的计算机之间通过TCP IP网络共享资源 在NFS的应用中 本地NFS的客户端应用可以透明地读写位
  • np.maximum()的用法

    一 用法 np maximum A B 用于逐元素比较两个array的大小 二 实例 import numpy as np A np array 1 2 3 4 B np array 5 6 7 8 print np maximum A B
  • WPF随笔(十)--使用AvalonDock实现可停靠式布局

    我们每天使用的许多软件都使用了可停靠式布局 可以方便的打开 关闭 收起 展开 移动选项卡 今天就来说明如何使用AvalonDock实现这种可停靠式布局 AvalonDock安装 最新版本的AvalonDock类库包含在程序包Extended