zoukankan      html  css  js  c++  java
  • 理解MeasureOverride和ArrangeOverride

    1、MeasureOverride测量方法,ArrangeOverride排列方法。

    2、当自己写容器时会用到这两个方法,需要在自定义类中重写MeasureOverride和ArrangeOverride(名字也能看出)

    //测量
    public
    class NavigationPanel:Panel {
         // availableSize为this(NavigationPanel)的大小
    protected override Size MeasureOverride(Size availableSize) {
            //初始化一个Size Size size
    = new Size();
            //遍历this下的所有子控件
    for (int i = 0; i < this.InternalChildren.Count; i++) {
              //取出一个控件,取名:child
    var child = this.InternalChildren[i];
              //***********************************
              //测量 child 的 大小
              //*Measure方法会递归遍历child下所有子容器的MeasureOverride方法获得大小
              //*********************************** child.Measure(availableSize);
              //child所需大小           size
    = child.DesiredSize;
              //当size大于availableSize时,会被裁剪【父容器裁剪子容器 -- 不难理解】
              //************************************
              //*延伸:当this(NavigationPanel)的大小为Auto时(availableSize大小为Auto时),子容器也为Auto时,那么this的大小怎么定?
              //答:这要看this的父容器大小,this父容器会给this一个Size,如果父容器也为Auto,那么整个窗体都为Auto大小
              //************************************ }
    return base.MeasureOverride(size); } //排列 protected override Size ArrangeOverride(Size finalSize) {
           // finalSize为MeasureOverride方法的返回值
    var thisWidth = finalSize.Width; for (int i = 0; i < this.InternalChildren.Count; i++) { var child = this.InternalChildren[i]; var poingX = thisWidth - child.DesiredSize.Width; if (poingX > 0) {
                //给子控件排列位置,可以查看Arrange方法原注释 child.Arrange(
    new Rect(new Point(poingX, 0), child.DesiredSize)); } else { child.Arrange(new Rect(new Point(0, 0), child.DesiredSize)); } } return base.ArrangeOverride(finalSize); } }
  • 相关阅读:
    OI无关--关于侧边栏
    Codeforces Round #528 div1
    BZOJ 3531: [Sdoi2014]旅行
    BZOJ 4538: [Hnoi2016]网络
    Codeforces Round #527 (Div. 3)
    Avito Cool Challenge 2018
    Educational Codeforces Round 56 (Rated for Div. 2)
    Codeforces Round #526 (Div. 1)
    2018-2019 Russia Open High School Programming Contest (Unrated, Online Mirror, ICPC Rules, Teams Preferred)
    Codeforces Round #525 (Div. 2)
  • 原文地址:https://www.cnblogs.com/ilison/p/12523839.html
Copyright © 2011-2022 走看看