[转]AVALONDOCK 2.0入门指南第一部分

article/2025/9/24 22:28:34

AvalonDock 2.0可以用来为WPF创建一个类似Visual Studio的界面,深入理解如何使用AvalonDock进行开发是很重要的。

在这个入门指南里,我将演示如何开始使用AvalonDock,下面的文章都是基于2.0版本的。并且不能用于早期的版本。

AvalonDock是一个组合的布局模型,很多的控件都在视图上显示,一个DockingManager 类也显示在停靠区,用于可以拖拽文档和工具。

从下面这个截图中我们可以理解AvalonDock组件


DockingManager 这是AvalonDock中的核心控件,它将包含的窗格排序,处理飞出的窗格,还有浮动的窗口。在上面这个图中,DockingManager 对象包含了所有空间(WPF控件),从顶部的工具栏到底部的状态栏都算。同时。DockingManager 也可以处理保存和恢复布局。

LayoutPanel 这个面板用来管理在一个方向上的子窗口(通过Orientation属性来选择方向),并且在它们之间添加了一个大小调节控件,在一个Orientation属性是Horizontal(水平)的LayoutPanel 上,排列了三个窗格。一个LayoutAnchorablePane在左,一个LayoutDocumentPane在中间。一个LayoutDockablePane在右边。

LayoutDockablePane 这个布局元素包含一个LayoutAnchorable对象的集合。通过它用来管理想TabControl这样的控件,在上面的截图中,LayoutDockablePanes是在左边的’Strumenti’ 和 ‘Progetti’ (工具和项目) 和在右边的’Classi’ 和 ‘Proprieta” (类视图和属性视图)的容器,一个LayoutDockablePane可以自动隐藏,就像’Errori’(错误)和’Lista Azioni’(操作列表) and ‘Uscita’(输出)。并且LayoutDockablePane可以被拖动到DockingManager上,成为一个浮动窗口或者附着到它的父控件DockingManager的边缘上。

LayoutDocumentPane 通常包含文档(DocumentContent类型)的一种窗格,但是其实也可以包含像上面提到的工具视图和类视图这样的DockableContents。在一个文档里。LayoutDocumentPane 被放置在ResizingPanel(水平方向)里。ResizingPanel则是上卖弄提到的在两个DockablePane中间的区域。注意。文档窗格是不能被移动的。

LayoutAnchorable 一个停靠内容,是软件控件的容器,总是被包含在一个窗格里(LayoutAnchorablePane或是LayoutDocumentPane),在截图里。LayoutAnchorable是一类对象(包含一个SharpDevelop对象),工具对象,但是错误窗口(它处于自动隐藏状态,被好办在一个自动隐藏窗格里)不是。LayoutAnchorable就像它名字所暗示的那样。可以被从他的容器窗格里拖走。然后重新放置在一个存在的窗格里。或者是放置在父DockingManager的边缘,或者是放置在一个浮动窗口里(LayoutAnchorableFloatingWindow)。

LayoutDocument 是一个仅可以被寄宿到LayoutDocumentPane的内容。它是一个特殊的内容,因为不能被停靠到边缘。仅能被放置到LayoutDocumentPane里。或者浮动在一个LayoutDocumentFloatingWindow窗口里。在途中,DocumentContent对象是program.cs’ 或 ‘MainForm.cs’ 文件视图

LayoutFloatingWindow ,是一个包含内容的窗口,当被拖动到一个DockingManager上面的时候,LayoutFloatingWindow(LayoutAnchorableFloatingWindow和LayoutDocumentFloatingWindow继承自他)集成在Window,总是包含一个窗格(LayoutAnchorablePane或是LayoutDocumentPane),窗格包含更多的内容(LayoutAnchorable或LayoutDocument),当用户对一个内容或是DockablePane执行拖拽,或者直接手工使用代码调用LayoutContent.Float()方法 LayoutFloatingWindow就被直接从DockingManager创建出来了。

LayoutPane 一个基类,LayoutDockablePane和LayoutDocumentPane继承自它。它为他们提供了一些共有的属性和方法。

LayoutContent 是LayoutAnchorable 和LayoutAnchorable类的父类。提供了共有的属性和方法。

理解布局元素是一些属于布局模型的类而不是属于视图是很重要的。因为,他们不是继承自FrameworkElement类,取而代之。AvalonDock包含了另一些类来展示这些组件的视图。这些类通常被命名为相关联的类名+Control字串。举个例子,在布局里创建的LayoutAnchorable创建了一个LayoutAnchorableControl(继承自FrameworkElement的类),并且绑定了LayoutAnchorableControl.Model 到这个LayoutAnchorable对象上。

每一个被创建的视图控件总是有着Model属性的布局元素。因此,重新设计一个相关视图控件的样式是可以的。

为了开始创建一个新的.net 4/.net 4.5的解决方案。并且添加对AvalonDock.dll的引用(可以直接添加也可以使用NuGet),然后添加AD命名空间到MainWindow.xaml中。

在根Grid下放置DockingManager组件和一个简单的布局。

 

 

DockingManager是AvalonDock的核心类,他的责任就是创建管理布局。布局被定义成一个ILayoutElement的树。树的根由LayoutRoot类指定。LayoutRoot由一些基本的子树来构成。。

1.根面板的 根属性指向主 LayoutPanel,也是LayoutRoot的内容属性。

2.大体上讲,RightSide/LeftSide/TopSide/BottonSide是LayoutAnchorGroup对象的集合属性,他们表示了停靠管理器的四个边。停靠管理器的锚通常是隐藏的。当用户移动鼠标到这些区域的时候。就会在自动隐藏的窗口里显示出来。

3.FloatingWindows属性是FloatingWindow的集合。一个浮动窗口当用户拖动一个窗格(LayoutAnchorable或是LayoutDocument)的时候就被创建出来,这个集合可以被AvalonDock自动更新,但是用户依然可以通过调用LayoutContent的Float()方法来创建一个浮动窗口。

Hidden是一个Anchorable(停靠)对象的集合。默认情况下,当用户点击一个LayoutAnchorable对象的关闭按钮,AvalonDock隐藏它:通过从布局里移除停靠元素,并且把他放入Hidden集合,当用户想要再一次显示的时候,AD又把这个内容从隐藏集合里删除重新显示在他被隐藏的那个窗格里。

当使用布局树的时候,程序员可以创建任何复杂的界面,LayoutAnchorablePane的DockWidth和DockHeight属性可以被用来设置窗格的初始宽度和高度。而LayoutDocumentPane类通常则填满可用的空间。AvalonDock管理内容元素的宽度和高度以使得可以使用所有的可用空间。因此如果一个LayoutAnchorablePane被放置在一个LayoutPanel里,为LayoutAnchorablePane使用一个固定尺寸而为LayoutDocumentPane使用一个比例长度。也就是说为停靠对象使用了比例长度。

一个LayoutDocumentGroup/ LayoutAnchorableGroup类可以被用来包含更多的LayoutDocumentPane/ LayoutAnchorablePane,举个例子,让我们来改变上面的例子来实现更复杂的例子。

 

<Window x:Class=  "  AvalonDock2Tutorial.MainWindow  "  xmlns=  " http://schemas.microsoft.com/winfx/2006/xaml/sentation  "  xmlns:x=  " http://schemas.microsoft.com/winfx/2006/xaml  "  xmlns:avalonDock=  " http://avalondock.codeplex.com  "  Title=  "  MainWindow  "Height=  "  350  "Width=  "  525  "> <Grid> <avalonDock:DockingManager x:Name=  "  dockingManager  "> <avalonDock:LayoutRoot> <avalonDock:LayoutPanel Orientation=  "  Horizontal  "> <avalonDock:LayoutDocumentPaneGroup> <avalonDock:LayoutDocumentPane> <avalonDock:LayoutDocument Title=  "  Doc1  "> <TextBox/> </avalonDock:LayoutDocument> <avalonDock:LayoutDocument Title=  "  Doc2  "> <TextBox/> </avalonDock:LayoutDocument> </avalonDock:LayoutDocumentPane> <avalonDock:LayoutDocumentPane> <avalonDock:LayoutDocument Title=  "  Doc3  "> <TextBox/> </avalonDock:LayoutDocument> </avalonDock:LayoutDocumentPane> </avalonDock:LayoutDocumentPaneGroup> <avalonDock:LayoutAnchorablePaneGroup DockWidth=  "  150  "Orientation=  "  Vertical  "> <avalonDock:LayoutAnchorablePane> <avalonDock:LayoutAnchorable Title=  "  Tool 1  "> <TextBox/> </avalonDock:LayoutAnchorable> <avalonDock:LayoutAnchorable Title=  "  Tool 2  "> <TextBox/> </avalonDock:LayoutAnchorable> </avalonDock:LayoutAnchorablePane> <avalonDock:LayoutAnchorablePane> <avalonDock:LayoutAnchorable Title=  "  Tool 3  "> <TextBox/> </avalonDock:LayoutAnchorable> <avalonDock:LayoutAnchorable Title=  "  Tool 4  "> <TextBox/> </avalonDock:LayoutAnchorable> </avalonDock:LayoutAnchorablePane> </avalonDock:LayoutAnchorablePaneGroup> </avalonDock:LayoutPanel> <avalonDock:LayoutRoot.LeftSide> <avalonDock:LayoutAnchorSide> <avalonDock:LayoutAnchorGroup> <avalonDock:LayoutAnchorable Title=  "  Autohidden Content  "> <TextBox/> </avalonDock:LayoutAnchorable> </avalonDock:LayoutAnchorGroup> </avalonDock:LayoutAnchorSide> </avalonDock:LayoutRoot.LeftSide> </avalonDock:LayoutRoot> </avalonDock:DockingManager> </Grid></Window>

 

运行这个工程你就可以重新排列内容了。移动他们到浮动窗口。为了更加熟悉AvalonDock,我建议你多试几次,然后重新排列内容实现更复杂的布局。

在入门指南的第二部分。我将演示我们如何保存布局。附加事件像DocumentClose/ DocumentClosing 或者ActiveContent 改变的事件。
原文地址:AvalonDock 2.0 getting started guide PART 1
著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!


原文链接: http://www.cnblogs.com/lazycoding/archive/2012/09/27/2705025.html
标签: <无>

转载于:https://www.cnblogs.com/x38160/p/3245022.html


http://chatgpt.dhexx.cn/article/MuUL4nP0.shtml

相关文章

WPF AvalonDock拖拽布局学习整理

AvalonDock提供了一个系统&#xff0c;允许开发人员使用类似于许多流行的集成开发环境&#xff08;IDE&#xff09;中的窗口对接系统来创建可自定义的布局。 AvalonDock遵循MVVM设计。Model由Xceed.Wpf.AvalonDock.Layout命名空间中包含的类表示。此命名空间中的类是布局模型中…

WPFAvalonDock基本用法

本文简单介绍AvalonDock2.0基本用法&#xff0c;下载AvalonDock 2.0dll及主题http://avalondock.codeplex.com/ AvalonDock基本类介绍 DockingManager:停靠管理类&#xff0c;xaml中AvalonDock的根节点 LayoutRoot:布局根节点&#xff0c;有四个属性LeftSide,RightSide,TopS…

AvalonDock的基本用法

AvalonDock是优秀的开源项目&#xff0c;用于创建可停靠式布局&#xff0c;能够在WPF中方便开发出类似VS2010的软件界面。对于复杂的软件系统&#xff0c;大量控件的使用会使的界面变得难以管理。AvalonDock帮我们解决了这一问题。想要在WPF项目中使用AvalonDock的功能&#xf…

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

我们每天使用的许多软件都使用了可停靠式布局&#xff0c;可以方便的打开、关闭、收起、展开、移动选项卡。今天就来说明如何使用AvalonDock实现这种可停靠式布局。 AvalonDock安装 最新版本的AvalonDock类库包含在程序包Extended.Wpf.Toolkit中&#xff0c;属于Xceed旗下的一…

WPF AvalonDock 常用功能使用

AvalonDock是什么&#xff1f; AvalonDock是一个开源项目【GitHub - Dirkster99/AvalonDock: Our own development branch of the well known WPF document docking libraryGitHub - Dirkster99/AvalonDock: Our own development branch of the well known WPF docume…

WPF 第三方控件学习使用——可停靠布局控件(AvalonDock)

需求 近期在做公司上位机产品规划与实验&#xff0c;参考了Blender软件的布局风格&#xff0c;希望能用WPF也做一个类似布局的上位机。于是开始寻找资源&#xff0c;很快就发现了AvalonDock。 AvalonDock简介 AvalonDock是Xceed公司 Wpf.Toolkit 中的一款收费产品&#xff0…

wpf-AvalonDock基础-安装和更换主题

2022/7/29更新&#xff1a;去掉标题行的钉子 在LayoutAnchorable上添加属性&#xff1a; CanAutoHide"False" CanClose"False"如果要去掉X&#xff0c;再添加 CanHide"False"最近对wpf的多窗口排列问题深感头疼&#xff0c;算尺寸、位置太麻烦…

AvalonDock使用(1)-基本用法

AvalonDock的基本用法 介绍AvalonDock库中的基本类DockingManager&#xff1a;停靠管理器类LayoutRoot : 布局根节点类LayoutPanel&#xff1a;布局面板类LayoutAnchorablePane&#xff1a;可停靠窗格类LayoutAnchorable:可停靠内容类 LayoutDocumentPane:文档窗格类LayoutDocu…

十进制-75在计算机中,十进制数75转换成二进制数是多少?

75转换成二进制是&#xff1a;1001011。 75/237......1 37/218......1 18/29.........0 9/24...........1 4/22...........0 2/21...........0 从下往上读余数&#xff0c;就是整数部分的案1001011。拓展资料&#xff1a; 十进制整数转换为二进制整数方法&#xff1a; 十进制整…

二进制数的算术运算

2&#xff0c; 二进制数的算术运算 2.1 二进制数的算术运算 二进制数的算术运算包括加法、减法、乘法和除法。 1)加法运算 加法进位规则:逢二进一。 加法运算法则: 000 01101 1110(向高位进位) 例:(1101)2(1011)2?&#xff0c;解算如下: 从执行加法的过程可知&…

二进制数与十进制数的相互转换、二进制数的乘除运算、移位运算

二进制数与十进制数的转换 聊二进制数的运算前&#xff0c;我们先看看二进制数的值与十进制数的值是如何相互转换的&#xff0c; 十进制转换成二进制 将十进制数除以2&#xff0c;得到的商再除以2&#xff0c;依次类推直到商为1时为止&#xff0c;然后在旁边标出各步的余数&am…

计算机组成原理 二进制数的运算

1、算数运算 &#xff08;1&#xff09;加法运算 二进制加法法则为&#xff1a; 000 10011 110&#xff08;向邻近高位有进位&#xff09; 1111&#xff08;向邻近高位有进位&#xff09; &#xff08;2&#xff09;减法运算 二进制减法法则为&#xff1a; 0-00 1-10 1-01 0-1…

将输入的十进制数转换成二进制数

软件&#xff1a;DEV&#xff0c;语言&#xff1a;C语言。 声明&#xff1a;本案例只考虑了整数&#xff08;即int型&#xff09;&#xff0c;故无法进行小数之间的转换&#xff08;例如float型&#xff0c;double型&#xff09;。 十进制整数转换为二进制整数采用"除2取…

二进制数表示法

二进制数表示法 二进制数是数字电路中应用最广泛的一种数值表示方法&#xff0c;在逻辑代数中也经常使用。 1、十进制数 在这种计数进位制中&#xff0c;每一位用0~9十个数字来表示&#xff0c;所以计数基数是十。超过9的数则需用多位数表示&#xff0c;其中低位数和相邻高位…

c语言程序10进制转2进制,C语言十进制数转换为二进制数

这是一个C语言 do while 循环示例:统计十进制正整数 n 转换为二进制数后,其二进制序列中包含的 1 和 0 的个数。 问题分析 输入:一个正整数。 输出:两个整数:1 的个数和 0 的个数。 将十进制数 n 转换成二进制数,一般采用“除 2 取余,倒序输出”的方法。 本题只是统计转…

二进制转十进制c++语言数组,C++实现读入二进制数并转换为十进制输出

C++实现读入二进制数并转换为十进制输出 题目描述 已知一个只包含0和1的二进制数,长度不大于10,将其转换为十进制并输出。 输入描述 输入一个二进制整数n,其长度不大于10 输出描述 输出转换后的十进制数,占一行 样例输入 110 样例输出 6 solution: 很多学过C初学C++的人可…

二进制数的加法步骤解析

文章目录 位运算二进制数加法步骤例子代码演示 二进制的加法需要用到位运算&#xff0c;所以先来复习下位运算。 位运算 运算符号(java)描述位与&都为1&#xff0c;结果为1&#xff0c;否则为0。位或|有一个为1或两个位都为1&#xff0c;则结果为1&#xff0c;否则为0。换…

二进制数及其运算

计算机的底层都是使用二进制数据进行数据流传输的&#xff0c;那么为什么会使用二进制表示计算机呢&#xff1f;什么是二进制数呢&#xff1f;如何使用二进制进行加减乘除&#xff1f;二进制数如何表示负数呢&#xff1f;本文将为你揭晓。 为什么用二进制表示 计算机内部是由I…

二进制数的运算

文章目录 前言一、加法运算规则二、减法运算规则三、乘法运算规则四、除法运算规则五、逻辑或运算规则六、逻辑与运算规则七、逻辑非运算规则八、逻辑异或运算规则 前言 此篇文章仅介绍二进制数的运算&#xff0c;不涉及其他进制的运算 一、加法运算规则 000 011 101 110 &…

什么是二进制数?二进制数是如何表示计算机信息的?

二进制是什么&#xff1f; 想要了解二进制数是如何表示计算机信息的&#xff1f;先要追本溯源&#xff0c; 二进制&#xff08;binary&#xff09;在数学和数字电路中指以2为基数的记数系统&#xff0c;以2为基数代表系统是二进位制的。这一系统中&#xff0c;通常用两个不同的…