MeasureOverride 和 ArrangeOverride
原文:MeasureOverride 和 ArrangeOverride
FrameworkElement.MeasureOverride方法实现当在派生类中重写时,测量子元素在布局中所需的大小,然后确定 FrameworkElement 派生类的大小。
FrameworkElement.MeasureOverride Method
函数原型:
protected virtual Size MeasureOverride (Size availableSize)
假设A为父element,B为子elements集合中的一个元素。通过在FrameworkElement的子类中override这个方法来计算B所需要的空间。
参数:A提供的可用空间。
返回值:通过计算后确定的A所需的空间。
在override的MeasureOverride方法中要做以下3步:
- 对每一个B调用Measure方法。
- Measure方法调用完后,B的期望大小就保存在DesiredSize中了。
- 计算所有的DesiredSize的和,作为总的期望空间返回。
FrameworkElement.ArrangeOverride 方法实现在派生类中重写时,为 FrameworkElement 派生类定位子元素并确定大小。
FrameworkElement.ArrangeOverride Method
函数原型:
protected virtual Size ArrangeOverride (
Size finalSize
)
参数: A所占的空间
返回值:A实际所用到的空间
通过在子类中override这个方法,实现为A中的所有子元素定位的目的。
例如:
/// <summary>
/// 先测量需要多大尺寸,做个申报准备
/// </summary>
/// <param name="constraint">限定的尺寸,比如,规定了width和height</param>
/// <returns></returns>
protected override Size MeasureOverride(Size constraint){
//定义预期的宽度和高度
double height = 0, width = 0;
UIElement element;
//遍历每个元素,计算所需的总尺寸
for (int i = 0; i < Children.Count; i++){
element = Children[i];
//按照限定的尺寸测量一下自己,拿镜子找着自己
element.Measure(constraint);
if (height < element.DesiredSize.Height)
height = element.DesiredSize.Height;
width += element.DesiredSize.Width;
}
//申报,需要这个尺寸
return new Size(width, height);
}
/// <summary>
/// 排列每个元素
/// </summary>
/// <param name="arrangeBounds">测量的尺寸</param>
/// <returns></returns>
protected override Size ArrangeOverride(Size arrangeBounds){
double currentX = 100;
UIElement element;
for (int i = 0; i < Children.Count; i++){
element = Children[i];
//排列每个元素
Children[i].Arrange(new Rect(currentX, 0, element.DesiredSize.Width, element.DesiredSize.Height));
currentX += element.DesiredSize.Width;
}
return arrangeBounds;
}
}
MeasureOverride 和 ArrangeOverride的更多相关文章
- 对WPF中MeasureOverride 和ArrangeOverride 浅理解
以前对MeasureOverride 和ArrangeOverride十分费解,看到了这篇博文茅塞顿开~ public class CustomControl1 : Panel { /// <s ...
- WPF MeasureOverride和 ArrangeOverride做个 页面导航
public class NavigationPanel:Panel { protected override Size MeasureOverride(Size availableSize) { S ...
- MeasureOverride和ArrangeOverride 练手项目
public class Diagnol:Panel { /// <summary> /// 测量 /// </summary> /// <param name=&quo ...
- WPF Layout 系统概述 MeasureOverride和ArrangeOverride
说的非常的好:多参考!!! https://blog.csdn.net/nncrystal/article/details/47416339 https://www.cnblogs.com/dingl ...
- 飞流直下的精彩 -- 淘宝UWP中瀑布流列表的实现
在淘宝UWP中,搜索结果列表是用户了解宝贝的重要一环,其中的图片效果对吸引用户点击搜索结果,查看宝贝详情有比较大的影响.为此手机淘宝特意在搜索结果列表上采用了2种表现方式:一种就是普通的列表模式,而另 ...
- 我的面板我做主 -- 淘宝UWP中自定义Panel的实现
在Windows10 UWP开发平台上内置的XMAL布局面板包括RelativePanel.StackPanel.Grid.VariableSizedWrapGrid 和 Canvas.在开发淘宝UW ...
- WPF系列 自定控件
引言 WPF中微软提供了一些基本的控件,但是工作中这些基础的控件往往不能满足我们的需求,这个时候我们就需要根据实际的需求去开发自己的控件,但要注意不是所有功能不满足的情况都需要通过自定义控件来实现.实 ...
- WPF基础到企业应用系列6——布局全接触
本文转自:http://knightswarrior.blog.51cto.com/1792698/365351 一. 摘要 首先很高兴这个系列能得到大家的关注和支持,这段时间一直在研究Windows ...
- 通过Measure & Arrange实现UWP瀑布流布局
简介 在以XAML为主的控件布局体系中,有用于完成布局的核心步骤,分别是measure和arrange.继承体系中由UIElement类提供Measure和Arrange方法,并由其子类Framewo ...
随机推荐
- [Angular] Router outlet events
For example, we have a component which just simply render router-outlet: import { Component } from ' ...
- Xshell Update
http://blog.netsarang.com/1629/xshell-update-5-0-1332/ Xshell Update (5.0.1332) By Alan Kim Thursday ...
- 【u215】河床
问题描述 小明是一个地理学家,经常要对一段河流进行测量分析.他从上游开始向下游方向等距离地选择了N个点测量水位深度.得到一组数据d1,d2,--,dn,回到实验室后数据分析员根据需要对数据进行分析,发 ...
- 如何使用Name对象,包括WorkspaceNames和DatasetNames
转自chanyinhelv原文 如何使用Name对象,包括WorkspaceNames和DatasetNames 第一原文链接 该博主还有很多有关arcgis二次开发的不错的文章. 如何使用Name对 ...
- js如何动态创建表格(两种方法)
js如何动态创建表格(两种方法) 一.总结 一句话总结: 1.方法一:写好创建表格的html代码,将之赋值给div的innerHTML. 2.方法二.直接用创建好的table元素的方法insertRo ...
- 转载:APP a打开b软件的附件
Importing & Exporting Documents in iOS Posted by weimenglee - 09 Aug 2011 https://mobiforge.com/ ...
- tensorflow 的使用流程
1. optimizer.minimize 与 global_step optimizer = tf.train.**(learning_rate) global_step = tf.Variable ...
- WPF入门(三)->几何图形之不规则图形(PathGeometry) (2)
原文:WPF入门(三)->几何图形之不规则图形(PathGeometry) (2) 上一节我们介绍了PathGeometry中LineSegment是点与点之间绘制的一条直线,那么我们这一节来看 ...
- 【27.34%】【codeforces 611D】New Year and Ancient Prophecy
time limit per test2.5 seconds memory limit per test512 megabytes inputstandard input outputstandard ...
- 手动安装配置Android Studio
官网下载Android Studio安装包后安装启动Android Studio,程序提示安装SDK,因为代理/FQ的原因,安装component失败,错误如下: Preparing "In ...