AvalonDock使用体验

AvalonDock is a docking windows control for WPF that lets you create customizable layouts using a full featured window docking system similar to what is found in many popular integrated development environements (IDEs) such as Visual Studio. It includes themes and samples to get you started.

AvalonDock是一款WPF控件,可以开发类似VS的停靠式界面。最新版本的AvalonDock类库包含在程序包Extended.Wpf.Toolkit中,可使用Nuget管理器搜索安装。

开源地址:https://archive.codeplex.com/?p=avalondock

转载于:https://blog.csdn.net/lordwish/article/details/86468331

    https://www.cnblogs.com/tianwenxue/p/4638261.html

    https://www.cnblogs.com/shitaotao/p/7648276.html

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一起占满窗体剩余空间
LayoutAnchorSide  边缘停靠类LayoutAnchorSide,其主要在窗体边缘停靠功能的类,其在LayoutRoot节点下面,默认是隐藏状态。
LayoutAnchorGroup  边缘停靠分组LayoutAnchorGroup,其主要在窗体边缘停靠功能的类,其在LayoutAnchorSide节点下面,是没有方向的。LayoutAnchorGroup内可以放LayoutAnchorable来承载控件


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

附上测试界面

附上测试代码

 1 <UserControl x:Class="RPATest.UserControl1"
 2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 6              xmlns:local="clr-namespace:RPATest"
 7              xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
 8              mc:Ignorable="d" 
 9              d:DesignHeight="600" d:DesignWidth="800">
10     <Grid>
11         <xcad:DockingManager>
12             <xcad:DockingManager.Theme>
13                 <xcad:AeroTheme/>
14             </xcad:DockingManager.Theme>
15             <xcad:LayoutRoot>
16                 <xcad:LayoutPanel Orientation="Horizontal">
17                     <xcad:LayoutAnchorablePaneGroup DockMinWidth="300">
18                         <xcad:LayoutAnchorablePane>
19                             <xcad:LayoutAnchorable Title="项目" IconSource="dir.png" CanHide="False">
20 
21                             </xcad:LayoutAnchorable>
22                             <xcad:LayoutAnchorable Title="活动" IconSource="dir.png" CanClose="False">
23 
24                             </xcad:LayoutAnchorable>
25                             <xcad:LayoutAnchorable Title="代码片段" IconSource="dir.png" CanClose="False">
26 
27                             </xcad:LayoutAnchorable>
28                         </xcad:LayoutAnchorablePane>
29                     </xcad:LayoutAnchorablePaneGroup>
30                     <xcad:LayoutDocumentPaneGroup>
31                         <xcad:LayoutDocumentPane>
32                             <xcad:LayoutDocument Title="输入框">
33                                 <TextBox Background="AliceBlue"/>
34                             </xcad:LayoutDocument>
35                         </xcad:LayoutDocumentPane>
36                     </xcad:LayoutDocumentPaneGroup >
37                     <xcad:LayoutAnchorablePaneGroup DockMinWidth="200">
38                         <xcad:LayoutAnchorablePane>
39                             <xcad:LayoutAnchorable Title="属性" IconSource="dir.png">
40 
41                             </xcad:LayoutAnchorable>
42                             <xcad:LayoutAnchorable Title="大纲" IconSource="dir.png">
43 
44                             </xcad:LayoutAnchorable>
45                             <xcad:LayoutAnchorable Title="源码" IconSource="dir.png">
46 
47                             </xcad:LayoutAnchorable>
48                         </xcad:LayoutAnchorablePane>
49                     </xcad:LayoutAnchorablePaneGroup>
50                 </xcad:LayoutPanel>
51                 <xcad:LayoutRoot.BottomSide>
52                     <xcad:LayoutAnchorSide>
53                         <xcad:LayoutAnchorGroup>
54                             <xcad:LayoutAnchorable Title="输出" AutoHideMinHeight="100" IconSource="dir.png" >
55                                 <TextBox Background="AliceBlue"/>
56                             </xcad:LayoutAnchorable>
57                         </xcad:LayoutAnchorGroup>
58                         </xcad:LayoutAnchorSide>
59                 </xcad:LayoutRoot.BottomSide>
60             </xcad:LayoutRoot>
61         </xcad:DockingManager>
62     </Grid>
63 
64 </UserControl>
测试代码
原文地址:https://www.cnblogs.com/MarcLiu/p/12844281.html