• 关于DockPageCaption的说明


    其实weifenluo先生写的dockpanel中用到了很重要的一个控件是DockPane,如下图

    这个控件其实由2个重要的控件组成的

    分别为DockPaneCaptionBase

    DockPaneStripBase。

    这个DockPaneCaptionBase控件,是比较简单的。显示当前显示activeContent的标题和几个操作按钮(改变停靠状态的按钮和窗口关闭的按钮)

    所以我想先从这个控件讲一下它的实现。

    基本的代码还是用weifenluo先生的代码,只是将一些耦合度高的代码去除了,增加了一些属性和事件,让它和外间交互。

    如果你们去看weifenluo先生的源代码的话,就会发现在dockpane的InternalConstruct函数中有一下的处理

    m_captionControl = DockPanel.DockPaneCaptionFactory.CreateDockPaneCaption(this);

    所以DockPaneCaptionBase控件是依赖与DockPane控件。也就是说如果没有DockPane控件的话,DockPaneCaptionBase控件也不会存在。

    这个依赖度是很强的。这里我将他们的关系解耦了。为什么一定要有这个耦合度呢。

    我将DockPaneCaptionBase控件设计成一个能够独立存在的控件。可以给任何控件用,不一定只有DockPane控件能用。

    按照这个思路,以及不改变原有的功能的前提下,我重新定义了一个相对于DockPaneCaptionBase控件的DockPageCaptionBase,

    在它上面定义一些属性和事件,他们是

    事件

    ActiveContentChanged      ActiveContent放生改变的时候发生

    DockContentClicked        鼠标左键按下的时候发生                              

    DockContentDoubleClicked    鼠标双击的时候发生

    属性

    ActiveContent { get;set }   

    IsActivated { get;set }  

    CaptionText { get }      当ActiveContent发生改变的时候,自动改变

    DockButton { get; }      改变停靠状态的按钮
    CloseButton { get; }      窗口关闭的按钮

    这样定义之后,DockPageCaptionBase控件只和dockContent发生了联系。这样耦合度就降低了

    最后看一下,在dockpane中如何使用该控件,代码如下,在dockpage的构造函数生成这个控件

    m_captionControl = new VS2005DockPageCaption();

    这样该控件是独立存在的控件了,不需要dockpage对象的传入

    在RefreshChanges函数中 通过外部控件dockpage来对他的状态进行更新。

    DockPageCaptionControl.ActiveContent = this.ActiveContent;
    DockPageCaptionControl.IsActivated = this.IsActivated;

    这样对于外部控件dockpage来说,根本不需要知道DockPageCaption控件当他的属性ActiveContent ,IsActivated发生改变的时候,会有什么样的反映

    这个控件就这么多。如果要详细的知道这个控件的话,可以看源代码,这个控件的源代码相对比较的简单。

    但是这个是我改写整个dockpanel的核心思路。看懂了这个我想其他的控件应该也没有太大的问题了

    由于本人文笔很差。也只能写出这样的文章,多多包涵了。

  • 相关阅读:
    MongoDB数据库学习总结
    windows及linux环境下永久修改pip镜像源的方法
    enumerate枚举函数
    sum求和函数
    zip拉链函数
    python实现面对面快传
    redis实现发布订阅
    python自定义classmethod
    Nginx为什么支持那么高的并发量?
    java进阶(28)--Map集合
  • 原文地址:https://www.cnblogs.com/guoyongrong/p/2337409.html
Copyright © 2020-2023  润新知