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

    代码
    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;
    }
    }
    代码
    <local:CustomControl1 Width="300" Background="Gray" HorizontalAlignment="Right" Margin="0,20,151,280">
    <Rectangle Width="100" Height="50" Fill="Red" Margin="10,10,0,0" />
    <Rectangle Width="100" Height="50" Fill="Yellow" Margin="10,10,0,0" />
    <Rectangle Width="100" Height="50" Fill="Green" Margin="10,10,0,0" />
    </local:CustomControl1>
  • 相关阅读:
    跨平台开发得力助手
    一分钟将你的WPF应用程序变身成炫彩动态Metro风格
    因.Net Target Framework导致的编译错误
    WCF笔记
    WCF元数据发布的2种方式:httpGetEnabled与mex
    使用ClickOnce发布应用程序
    TFS笔记
    升级镁光M4固态硬盘的固件
    Android调用RESTful WCF服务
    用原生的android SDK与PhoneGap分别做了个示例,发现PhoneGap的要慢得多
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/1930952.html
Copyright © 2011-2022 走看看