最近在研究AvalonDock的一些使用,碰到了一些问题。现在拿出来跟大家分享分享。

网上找了一大把AvalonDock 1.3版本的资料,弄出Demo后发现属性面板(DockableContent)设置成浮动后不能停靠其它的面板。最后只得试试AvalonDock 2.0版本的,还好2.0版本没让我们失望。

首先需要库文件:Xceed.Wpf.AvalonDock,若需要Aero或VS2010主题效果需引用Xceed.Wpf.AvalonDock.Themes.Aero或Xceed.Wpf.AvalonDock.Themes.VS2010,当然还有其它漂亮的主题可以在官网(http://avalondock.codeplex.com/)自行下载.

首先需要在xaml文件头部引入这些dll(当然在此之前您还得把前面说到的库文件引入项目):

xmlns:avalonDock="http://schemas.xceed.com/wpf/xaml/avalondock"

xaml布局代码:

 <avalonDock:DockingManager Grid.Row="1" x:Name="DManager">
<avalonDock:DockingManager.Theme>
<!--<avalonDock:AeroTheme/>-->
<avalonDock:VS2010Theme/>
<!--<avalonDock:ExpressionDarkTheme/>-->
<!--<avalonDock:ExpressionLightTheme/>-->
<!--<avalonDock:GenericTheme/>-->
<!--<avalonDock:MetroTheme/>-->
</avalonDock:DockingManager.Theme> <avalonDock:LayoutRoot>
<avalonDock:LayoutRoot.LeftSide >
<avalonDock:LayoutAnchorSide >
<avalonDock:LayoutAnchorGroup>
<avalonDock:LayoutAnchorable Title="left1" AutoHideWidth="50" ContentId="left1">
<TextBox Width="80" SelectionChanged="TextBox_SelectionChanged"></TextBox>
</avalonDock:LayoutAnchorable> <avalonDock:LayoutAnchorable Title="left2" AutoHideWidth="20" ContentId="left2">
<TextBox Width="80"></TextBox>
</avalonDock:LayoutAnchorable> </avalonDock:LayoutAnchorGroup>
</avalonDock:LayoutAnchorSide>
</avalonDock:LayoutRoot.LeftSide> <avalonDock:LayoutPanel>
<avalonDock:LayoutAnchorablePaneGroup DockWidth="100">
<avalonDock:LayoutAnchorablePane>
<avalonDock:LayoutAnchorable Title="text1" ContentId="text1">
<TextBox TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
</avalonDock:LayoutAnchorable> <avalonDock:LayoutAnchorable Title="text2" ContentId="text2">
<TextBox TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
</avalonDock:LayoutAnchorable>
</avalonDock:LayoutAnchorablePane>
</avalonDock:LayoutAnchorablePaneGroup> <avalonDock:LayoutDocumentPane>
<avalonDock:LayoutDocument Title="document1" ContentId="doc1">
<TextBox AcceptsReturn="True" TextWrapping="Wrap"></TextBox>
</avalonDock:LayoutDocument> <avalonDock:LayoutAnchorable Title="document2" ContentId="doc1">
<TextBox AcceptsReturn="True" TextWrapping="Wrap"></TextBox>
</avalonDock:LayoutAnchorable>
</avalonDock:LayoutDocumentPane>
</avalonDock:LayoutPanel>
</avalonDock:LayoutRoot> </avalonDock:DockingManager>

效果:

<avalonDock:LayoutAnchorablePane>和<avalonDock:LayoutDocumentPane>我分别把它们叫做属性布局面板和文档布局面板。属性布局面板的特性是停靠在面板的边缘时可以设置自动隐藏,而且属性布局面板也可以作为一个可停靠面板供其它的属性布局面板停靠。文档布局面板只可以漂浮和停靠在主布局面板中,不可以停靠在属性布局面板里面。

<avalonDock:LayoutAnchorablePane>和<avalonDock:LayoutDocumentPane>布局面板需要位于<avalonDock:LayoutPanel>布局面板里面,若有需要设置多个属性布局面板和文档布局面板置于一个面板组中可以分别使用<avalonDock:LayoutAnchorablePaneGroup>和 <avalonDock:LayoutDocumentPaneGroup>。

正在承载我们内容控件的是<avalonDock:LayoutAnchorable>和<avalonDock:LayoutDocument>,我们可以在它们里面添加我们自己的内容。它们只能放在<avalonDock:LayoutAnchorablePane>和<avalonDock:LayoutDocumentPane>里面,看自己的需求可以自己组合使用。

  布局就到这里了,接下来让我们看看如何保存和恢复布局,AvalonDock 2.0提供了相应的操作类XmlLayoutSerializer,需要添加引用using Xceed.Wpf.AvalonDock.Layout.Serialization;

cs代码:

         //保存布局
var serializer = new XmlLayoutSerializer(DManager);
using (var stream = new StreamWriter("lay.txt"))
serializer.Serialize(stream);
       //恢复布局
var serializer = new XmlLayoutSerializer(DManager);
using (var stream = new StreamReader("lay.txt"))
serializer.Deserialize(stream);

保存布局会把当前的布局(DManager)保存在文件“lay.txt”中,恢复布局会把“lay.txt”中的布局内容恢复到界面(DManager)中。这里有点必须注意,使用这个功能时必须为每个内容面板添加ContentId属性,如 <avalonDock:LayoutAnchorable Title="left1" AutoHideWidth="50" ContentId="left1">,否则将不能恢复。

分享就到这里结束了,其实AvalonDock还有许多其它方面的功能,比如可以使用<avalonDock:DockingManager.AnchorableHeaderTemplate>为属性内容界面的头部自定义内容等等,水平有限,内容可能存在纰漏之处还请见谅。

源代码下载

AvalonDock 2.0 的简单运用的更多相关文章

  1. AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(一)

    随着IOS7由之前UI的拟物化设计变为如今的扁平化设计,也许扁平化的时代要来了,当然我们是不是该吐槽一下,苹果什么时候也开始跟风了,自GOOGLE和微软界面扁平化过后,苹果也加入了这一队伍. Aval ...

  2. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...

  3. 云优化的概念、Entity Framework 7.0、简单吞吐量压力测试

    云优化的概念.Entity Framework 7.0.简单吞吐量压力测试 继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之 ...

  4. Android 6.0 超级简单的权限申请2 (Permission)

    代码地址如下:http://www.demodashi.com/demo/13506.html 写在前面 上次写了一个权限申请的例子Android 6.0 超级简单的权限申请 (Permission) ...

  5. Android 6.0 超级简单的权限申请 (Permission)

    代码地址如下:http://www.demodashi.com/demo/13369.html 背景描述 随着Android系统的不断升级,谷歌对用户的隐私是越来越注重了,给我们开发者带来了更多的繁琐 ...

  6. 基于WPF系统框架设计(5)-Ribbon整合Avalondock 2.0实现多文档界面设计(二)

    AvalonDock 是一个.NET库,用于在停靠模式布局(docking)中排列一系列WPF/WinForm控件.最新发布的版本原生支持MVVM框架.Aero Snap特效并具有更好的性能. Ava ...

  7. 用Vue2.0实现简单的分页及跳转

    用Vue2.0实现简单的分页及跳转 2018年07月26日 20:29:51 Freya_yyy 阅读数 3369    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  8. 用pytorch1.0搭建简单的神经网络:进行多分类分析

    用pytorch1.0搭建简单的神经网络:进行多分类分析 import torch import torch.nn.functional as F # 包含激励函数 import matplotlib ...

  9. percona-toolkit 3.0.13 简单安装记录

    percona-toolkit 3.0.13 简单安装记录 环境:centos6.x mysql:8.0.17 yum -y install perl-DBIyum -y install perl-D ...

随机推荐

  1. JavaFX(三)窗口拖动

    1.问题场景 在上一篇中,我们将窗口的默认标题栏隐藏从而导致鼠标点击窗体无法进行拖动. 2.解决思路 给组件添加鼠标按下事件监听器和鼠标拖动事件监听器. 3.代码实现 代码片段: private do ...

  2. 使用 MJ 自定义下拉刷新

    // // ViewController.m // Refresh // // Created by Apple on 16/7/19. // Copyright © 2016年 mac. All r ...

  3. vs中两张图片的融合

    这个其实就是从csdn上面下载的一个例程.感谢这位同学的总结,与源码的有偿分享. 本随笔就是把它通过4个随笔的拆分,实现的. 可以通过: http://blog.csdn.net/masibuaa/a ...

  4. PHP底层的运行机制与原理

    PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可 ...

  5. maya 2015配置openCollada插件

    1.下载对应的openCollada插件内容 https://github.com/KhronosGroup/OpenCOLLADA/wiki/OpenCOLLADA-Tools 该页面目前提供Mac ...

  6. 203. Segment Tree Modify

    最后更新 二刷 08-Jan-2017 利用线段树来更改,找到更改的NODE,然后更改那个brach上的所有max值. 首先确定recursion的终止条件 然后通过判断大小来找方向 找到NODE之后 ...

  7. 数据库SQL优化大总结之百万级数据库优化方案

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...

  8. sql中的case when语句

    1.在where子句中: CREATE TABLE `hello`.`sometbl` ( `id` INT NOT NULL AUTO_INCREMENT , `a` VARCHAR(45) NUL ...

  9. Access和Sql区别

    假设表game有一字段为gameYuiJian为bit字段(SQL SERVER 20005)和"是/否"字段(ACCSS数据库),在编写脚本文件时,如下才能正确执行 SQL st ...

  10. Bootstrap引用

    <!--设置移动设置页面标准-->        <meta name="viewport" content="width=device-width,i ...