博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MeasureOverride 和 ArrangeOverride
阅读量:6344 次
发布时间:2019-06-22

本文共 1732 字,大约阅读时间需要 5 分钟。

原文:

FrameworkElement.MeasureOverride方法实现当在派生类中重写时,测量子元素在布局中所需的大小,然后确定 FrameworkElement 派生类的大小。

FrameworkElement.MeasureOverride Method

函数原型:

protected virtual Size MeasureOverride (Size availableSize)

假设A为父element,B为子elements集合中的一个元素。通过在FrameworkElement的子类中override这个方法来计算B所需要的空间。

参数:A提供的可用空间。

返回值:通过计算后确定的A所需的空间。

在override的MeasureOverride方法中要做以下3步:

  1. 对每一个B调用Measure方法。
  2. Measure方法调用完后,B的期望大小就保存在DesiredSize中了。
  3. 计算所有的DesiredSize的和,作为总的期望空间返回。

FrameworkElement.ArrangeOverride 方法实现在派生类中重写时,为 FrameworkElement 派生类定位子元素并确定大小。

FrameworkElement.ArrangeOverride Method

函数原型:

protected virtual Size ArrangeOverride (

               Size finalSize

)

参数: A所占的空间

返回值:A实际所用到的空间

通过在子类中override这个方法,实现为A中的所有子元素定位的目的。

例如:
public class CustomControl1 : Panel {
/// <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;
}
}

转载地址:http://iokla.baihongyu.com/

你可能感兴趣的文章
Ubuntu下安装遨游浏览器
查看>>
自定义Linux service脚本
查看>>
微信开发之发红包
查看>>
一键lnmp脚本&&php扩展模块安装(适用于CENTOS6.X系列)
查看>>
二维观察---文字的裁剪
查看>>
矩形覆盖
查看>>
ICMP
查看>>
界面设计模式(第2版)(全彩)
查看>>
linux 的IP配置和网络问题的排查(补充)
查看>>
解决VMware Workstation错误:未能锁定文件
查看>>
CentOS6 手动编译升级 gcc
查看>>
memcached的安装与开启脚本
查看>>
Linux与Window字符集~~伤不起的幽灵空白符
查看>>
zabbix 邮件报警 -- sendmail
查看>>
JavaScript异步编程
查看>>
tcpdump用法小记
查看>>
MySQL基础安全注意细节
查看>>
Oracle随机函数—dbms_random
查看>>
pvr 批量转换
查看>>
linux命令basename使用方法
查看>>