首页 > 其他分享 >wpf布局递归

wpf布局递归

时间:2024-04-22 22:57:25浏览次数:25  
标签:控件 child 调用 递归 布局 MeasureOverride Measure 重载 wpf

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没有重载它。我们只在有必要的自定义绘制时重载。

标签:控件,child,调用,递归,布局,MeasureOverride,Measure,重载,wpf
From: https://www.cnblogs.com/ggtc/p/18151568

相关文章

  • WPF/C#:如何显示具有层级关系的数据
    前言比方说我们有以下两个类:publicclassClass{publicstring?Name{get;set;}publicList<Student>?Students{get;set;}}publicclassStudent{publicstring?Name{get;set;}}一个表示班级,一个表示学生,一个班级包含多个学生。......
  • WPF relativesource,self,FindAncestor,AncestorType,AncestorLevel,PreviousData,Tem
    <Windowx:Class="WpfApp68.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com......
  • WPF的事件命令
    WPF通常使用xmlns:i="http://schemas.microsoft.com/xaml/behaviors"来做一些奇形怪状的绑定,比如对TextBlock的命令绑定而命令事件如下路由事件(RoutedEvents):这些是WPF中最常用的事件类型,可以沿着元素树路由。例如:MouseEnterMouseLeaveKeyDownKeyUpClickDouble......
  • HarmonyOS NEXT应用开发—验证码布局
    介绍本示例介绍如何使用Text组件实现验证码场景,并禁用对内容的选中、复制、光标。效果图预览使用说明单击组件可弹出输入法在进行验证码输入时,无法对中间单个数字进行更改,无法选中输入内容,无光标实现思路因为要禁用复制、选中等功能,这里使用了Text组件,而不是TextInput......
  • WPF自定义控件,如何使得xaml涉及器中的修改能立即反应到预览
    这是我无意中发现的,xaml中设置的是依赖属性而不是包装器,所以我们可以直接在注册依赖属性那里设置回调,触发某个控件重绘,比如本身或父控件重绘。xaml设计器就会实时更新1//!!!由于xaml解析是直接通过这里进行的,不通过包装器,所以通过设置这里的回调,可以使得在编辑xaml自定义依赖......
  • ASO布局策略,如何布局优化才能让产品快速成长?
    在面对黑色的8月,苹果爸爸闹脾气后,各种应用的下架、清词、清榜以及调整评论权重的一阵闹腾,可是把做ASO优化的小伙伴和开发小哥哥们,搞得鸡飞狗跳不得安宁。在面对慢慢把自己的主场进行的打扫干净的苹果爸爸,刚上架的app产品要怎样才能做好ASO优化呢?历经千辛万苦开发,准备上架的app怎......
  • WPF implemented Single Instance via mutex and activated the existed window via
    1.RemoveStartUri="MainWindow.xaml"inApp.xaml;2.IntheApp.xaml.cs,overriveasbelowusingSystem;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Runtime.InteropServices;usin......
  • 【根据前序和中序遍历构造二叉树】栈+迭代 || 递归
    105.从前序与中序遍历序列构造二叉树栈+迭代规律前序遍历中相邻节点u和v,v节点一定是u节点的左节点或者是其自身某个祖先的右节点一个没有右节点的链,中序遍历是从叶子到根,前序遍历是从根到叶子解题思路用一个栈维护前序遍历的节点用一个指针p指向中序遍历的第一个叶子节......
  • flex布局---标签切换
    我们需要实现下面的页面效果 这边将代码放在下面html部分<!--标签页标题--><viewclass="tob"><viewclass="tab-item">音乐推荐器</view><viewclass="tab-item">播放器</view><viewclass="tab-item">播放列表......
  • 【转载】WPF中Binding使用StringFormat格式化字符串方法
    原文链接:https://www.cnblogs.com/xuliming/articles/StringFormat.htmlWPF中Binding使用StringFormat格式化字符串方法 货币格式<TextBlockText="{BindingPrice,StringFormat={}{0:C}}"/>//$123.46货币格式,一位小数<TextBoxText="{BindingPrice,Stri......