avalondock章节二

avalondock章节二用avalondock写的界面布局,但是对好多东西还是不懂,最起码布局是懵懵懂懂的,先用VS2010自带的工具文档大纲工具看下它的布局再说,布局如下图所示:看下源代码中的DockingManager:publicclassDockingManager:Control,IOverlayWindowHost//,ILogicalChildrenContainer照代码理解的意思

大家好,又见面了,我是你们的朋友全栈君。

用avalondock写的界面布局,但是对好多东西还是不懂,最起码布局是懵懵懂懂的,先用VS2010自带的工具文档大纲工具看下它的布局再说,布局如下图所示:

看下源代码中的DockingManager:

public classDockingManager : Control, IOverlayWindowHost//,ILogicalChildrenContainer

照代码理解的意思是个逻辑树的容器,也是逻辑树的总管理者,我想既然要管理的话,应该是在最高层次,包含所有对象吧,要不管理不了。

Control类里只能包含一个对象,看文档结构里,它包含了个LayoutRoot 找字面意思应该是布局的根,源代码

[ContentProperty(“RootPanel”)]

    [Serializable]

    public class LayoutRoot : LayoutElement,ILayoutContainer, ILayoutRoot

是一个根面板,我们就认为所有的dockingpanel中的文档或者其他控件都要在这个panel上布局,要不怎么能叫RootPanel, 类比xaml文件映射下 DockingManager-àWindow

LayoutRoot à(Grid,stack) ILayoutContainer从这个意思理解就够了,就是个布局容器.

LeftSide与LayoutPanel在同一级别。

public class LayoutRoot : LayoutElement,ILayoutContainer, ILayoutRoot

    {

        publicLayoutRoot()

        {

            RightSide = new LayoutAnchorSide();

            LeftSide = newLayoutAnchorSide();

            TopSide = newLayoutAnchorSide();

            BottomSide = new LayoutAnchorSide();

            RootPanel = new LayoutPanel(new LayoutDocumentPane());

        }

LayoutRoot构造函数里已经包含了,5个对象了。分别是 左右上下边停靠和面板停靠,所以在LayoutRoot的children中必定含有LayoutAnchorSide LayoutPanel 在添加LayoutAnchorSide布局是应该是要首先定义它的位置,在代码中表现为

   <avalondock:LayoutRoot>

                <avalondock:LayoutRoot.LeftSide>

                    <avalondock:LayoutAnchorSide>

                                   </avalondock:LayoutAnchorSide>

</avalondock:LayoutRoot.LeftSide>

   </avalondock:LayoutRoot>

如果停靠的是一组对象在leftside上的话就要用到下面的类

public class LayoutAnchorGroup : LayoutGroup<LayoutAnchorable>, ILayoutPreviousContainer,ILayoutPaneSerializable

布局停靠组,因为有它有1个容器类是存放布局停靠的对象的,看类的定义:

public class LayoutAnchorSide : LayoutGroup<LayoutAnchorGroup>

该类的对象必须包含 LayoutAnchorGroup 元素XAML中的实现如下图所示

看如下类的定义:

public class LayoutAnchorGroup : LayoutGroup<LayoutAnchorable>, ILayoutPreviousContainer,ILayoutPaneSerializable

在声明LayoutAnchorGroup中必须也要声明一个LayoutAnchorable元素。

LayoutAnchorable : LayoutContent

从类声明可以看出,在这个对象下面就可以声明Content,内容了。

Leftside实现的为左边栏的布局实现。凡是带side的都为在边栏依附的位置。

 

 LayoutPanel 除过side布局,其余的全部包含在LayoutPanel;

LayoutDocumentPane 是中心内容的panel

LayoutAnchorablePaneGroup为上,下,左,右。停靠的窗口。

 

               

                

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162161.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • c语言字符串赋值_c++中字符串变量

    c语言字符串赋值_c++中字符串变量从大一学c语言到现在都快三年了,今天居然还在简单的字符串赋值的过程中犯了错误,应该记下来,以免日后再犯。这是一个结构体typedefstructstudent{charname[21];charsno[21];intgrade;}student;现在又两个student类型的变量stu1,stu2,当我想把stu2的值赋给stu1是我一开始是这样…

    2022年10月27日
  • java中ReentrantLock类的tryLock和tryLock的例子和用法

    java中ReentrantLock类的tryLock和tryLock的例子和用法ReentrantLock类的tryLock和tryLock(时间)马克-to-win:tryLock的方法就是试一下,如果能得到锁,就返回真,如果当时得不到,马上就返回假,绝不等。tryLock(时间)的用法就是在规定的时间内设法得到锁。如果在规定的时间内最终不能得到锁,就返回假。注意,这个方法是可以被打断的,打断后的处理方法和上面的例子lockInterruptibly的处理一样。…

  • mysql优化的几种方法_sgd优化算法

    mysql优化的几种方法_sgd优化算法1.SGDBatchGradientDescent在每一轮的训练过程中,BatchGradientDescent算法用整个训练集的数据计算costfuction的梯度,并用该梯度对模型参数进行更新:Θ=Θ−α⋅▽ΘJ(Θ)\Theta=\Theta-\alpha\cdot\triangledown_\ThetaJ(\Theta)优点:costfuction若为凸函数,能

    2022年10月22日
  • 网络编程TCP三次握手

    网络编程TCP三次握手

  • FVWM简明使用指南

    FVWM简明使用指南http://minus273.eu/mirrors/2001315450/fvwm_frame.html简明使用指南FvwmisawindowmanagerforX11.Itisdesignedtominimizememoryconsumption,providea3Dlooktowindowframes,andavirtual

  • 什么是linux Qt[通俗易懂]

    什么是linux Qt[通俗易懂]Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt,基于Framebuffer的QtEmbedded,快速开发工具QtDesigner,国际化工具QtLinguist等部分Qt支持所有Unix系统,当然也包括Linux,还支持WinNT/Win2k,Win95/98平台。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号