wpf布局递归的调用到底是怎样的顺序?我一直挺模糊。

按照继承顺序。

已知:

1.1.UIElement:声明了Measure

1.2.UIElement:声明了MeasureCore,返回Size(0,0)

1.3.UIElement:Measure调用了this.MeasureCore

2.1.FrameworkElement:声明了MeasureOverride返回Size(0,0)

2.2.FrameworkElement:重载MeasureCore中调用了this.MeasureOverride

2.3.FrameworkElement:MeasureCore是封闭的

3.1.Control:重载MeasureOverride中调用了child.Measure

3.2.Panel:未重载MeasureOverride

4.1.Window:重载MeasureOverride调用了child.Measure

4.2.UserControl:未重载MeasureOverride

4.3.Grid:重载MeasureOverride中对于每个孩子调用了child.Measure

能够整理出来的

this.Measure=>MeasureCore=>MeasureOverride=>child.Measure的调用形成了一个递归,这个顺序是确定的。

而且一般来说,this.Measure=>MeasureCore=>MeasureOverride的调用是固定下来了的。MeasureOverride=>child.Measure的调用则看我们自定义控件的继承了。

如果是继承Control,那么可以调用base.MeasureOverride()或者显式调用child.Measure就能继续这个递归;如果是继承FrameworkElement或Panel,则只能我们自己显式调用child.Measure了。

问题是在一个窗体中,触发这个递归的第一次this.Measure调用在在哪里进行的?

怎么看待Measure和Arrange两个阶段

Measure阶段的原则是子元素会根据其内容的需求返回尺寸

Arrange阶段的原则是子元素按照父控件给的尺寸设定自己的尺寸

所以重要的是我们先确定需要实现哪种布局,然后第一点是就要在Arrange阶段给子控件一个布局规则对应的值。而如何计算给子控件的值,可以放在可以Measure结束后Arrange开始前的任何地方。第二点是我们要返回多大的值,是决定于子控件,还是自己。

最后一个阶段,Render

OnRender定义于UIElement中,在Arrange函数中被调用,调用DrawContext绘制控件。FrameworkElement没有重载它,Control没有重载它。我们只在有必要的自定义绘制时重载。

怎么遍历

int count = this.VisualChildrenCount;

            if (count > 0)
{
UIElement child = (UIElement)(this.GetVisualChild(0));
if (child != null)
{
child.Measure(constraint);
return child.DesiredSize;
}
}

wpf布局递归的更多相关文章

  1. WPF快速入门系列(1)——WPF布局概览

    一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...

  2. 学习WPF——WPF布局——了解布局容器

    WPF布局工作内部原理 WPF渲染布局时主要执行了两个工作:测量和排列 测量阶段,容器遍历所有子元素,并询问子元素所期望的尺寸 排列阶段,容器在合适的位置放置子元素,并设置元素的最终尺寸 这是一个递归 ...

  3. WPF布局系统[转]

    转自:http://www.cnblogs.com/niyw/archive/2010/10/31/1863908.html前言 前段时间忙了一阵子Google Earth,这周又忙了一阵子架构师论文 ...

  4. 对比MFC资源文件谈谈WPF布局方式

    对比MFC资源文件谈谈WPF布局方式 MFC方式 对于传统的MFC基于UI的应用程序设计通常分两步走,首先是设计UI,使用的是RC文件,然后是代码文件,对RC文件进行操作,如下面Figure 1 的基 ...

  5. WPF 布局总结

    一.WPF布局原理 WPF窗口只能包含单个元素,为在WPF窗口中放置多个元素,需要放置一个容器,让后在容器中添加其他元素.“理想的”WPF窗口需遵循以下几个原则: 1.不应显示设定元素的尺寸.元素应当 ...

  6. 浅谈 WPF布局

    我们首先来了解一下图形化用户界面(Graphic User Interface)也就是我们常常听到的GUI.举个简单的例子,同样是数据,我们可以用控制台程序加格式控制符等输出,但是这些都不如GUI来的 ...

  7. 意外地解决了一个WPF布局问题

    原文:意外地解决了一个WPF布局问题 今天做了一个小测试,意外地将之前的一个困扰解决了,原问题见<WPF疑难杂症会诊>中的“怎么才能禁止内容撑大容器?” 以前我是在外侧嵌套Canvas容器 ...

  8. WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系

    WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系: 1.Canvas/WrapPanel控件: 其子控件的HorizontalAlign ...

  9. WPF 10天修炼 第四天- WPF布局容器

    WPF布局 WPF的窗口也就是Window类,是一个内容控件,该控件派生自ContentControl.内容控件有一个Content属性,该属性有一个限制,只能放置一个用户界面元素,或一个字符串.为了 ...

  10. WPF布局控件常用属性介绍

    WPF布局控件常用属性介绍 其它 | 作者:慧都控件网 | 2011-04-06 13:41:57| 阅读 0次 有用(0) 评论(0)   概述:WPF布局控件都是派生自System.Windows ...

随机推荐

  1. OpenHarmony Camera源码分析

    一.简介 当前,开源在科技进步和产业发展中发挥着越来越重要的作用,OpenAtom OpenHarmony(简称"OpenHarmony")赋予了开发者孕育创新的种子,也为数字化产 ...

  2. Qt6安装

    *:Qt现在基本都是在线安装了,但是下载的速度特别慢,所以此次记录下如何提速,快速安装 一.在线安装器下载 我用的这个(非官网):https://mirrors.tuna.tsinghua.edu.c ...

  3. 什么是慢SQL且如何查看慢SQL

    什么是慢 SQL 且如何查看慢 SQL? 介绍 某个 SQL 执行时间超过指定时间时称为慢 SQL.我们可以查看慢 SQL,包括历史慢 SQL 以及当前慢 SQL. 查看历史慢 SQL 首先要设置 l ...

  4. 【鸿蒙千帆起】《钢岚》成为首款基于HarmonyOS NEXT开发的战棋新游

      近日,紫龙游戏旗下BlackJack工作室全新战棋旗舰作品<钢岚>在华为游戏中心首发上线,并宣布<钢岚>完成鸿蒙原生应用开发,成为基于HarmonyOS NEXT开发的首款 ...

  5. Vue3 + TypeScript 开发指南

    0x00 概述 阅读以下内容需要具备一定的 Vue2 基础 代码采用规范为:TypeScript + 组合式 API + setup 语法糖 (1)Vue3 简介 Vue3 第一个正式版发布于 202 ...

  6. mysql 锁机制(一)

    前言 介绍mysql 锁的机制. 正文 锁类型 读锁,是一种共享锁,s锁,允许一个事务是读取一行,阻止其他事务获取相同的数据集的排他锁. 注:排它锁的意思就是说只能加相同的锁,不能加不同的锁,比如都加 ...

  7. springboot多模块项目启动经历

    springboot多模块使用 @ 目录 springboot多模块使用 前言 大佬把项目权限给我了,我就先下下来看看学习一下 一.识别 二.maven配置 1.安装maven 三.加载刷新 总结 前 ...

  8. 力扣618(MySQL)-学生地理信息报告(困难)

    题目: 一所美国大学有来自亚洲.欧洲和美洲的学生,他们的地理信息存放在如下 student 表中 该表没有主键.它可能包含重复的行.该表的每一行表示学生的名字和他们来自的大陆. 一所学校有来自亚洲.欧 ...

  9. 牛客网-SQL专项训练20

    ①学生.书店和图书三个实体集之间的联系属于:多元联系. 解析: 参与联系的实体集个数大于2个时,为多元联系:这里学生.书店.图书是三个实体,为多元联系. 二元联系指只有两个实体集参与的联系: 自反联系 ...

  10. 超大福利 | 这款免费 Java 在线诊断利器,不用真的会后悔!

    线上系统为何经常出错?数据库为何屡遭黑手?业务调用为何频频失败?连环异常堆栈案,究竟是哪次调用所为? 数百台服务器意外雪崩背后又隐藏着什么?是软件的扭曲还是硬件的沦丧? 走进科学带你了解 Arthas ...