说的非常的好:多参考!!!

https://blog.csdn.net/nncrystal/article/details/47416339

https://www.cnblogs.com/dingli/archive/2011/04/22/2024786.html#top

 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>

上面代码原文地址:http://www.cnblogs.com/xiaokang088/archive/2011/01/08/1930952.html

WPF Layout 系统概述 MeasureOverride和ArrangeOverride的更多相关文章

  1. WPF Layout 系统概述——Measure

    原文:WPF Layout 系统概述--Measure 前言 在WPF/Silverlight当中,如果已经存在的Element无法满足你特殊的需求,你可能想自定义Element,那么就有可能会面临重 ...

  2. WPF Layout 系统概述——Arrange

    原文:WPF Layout 系统概述--Arrange Arrange过程概述 普通基类属性对Arrange过程的影响 我们知道Measure过程是在确定DesiredSize的大小,以便Arrang ...

  3. WPF/Silverlight Layout 系统概述——Arrange(转)

    Arrange过程概述 普通基类属性对Arrange过程的影响 我们知道Measure过程是在确定DesiredSize的大小,以便Arrange过程参考这个DesiredSize,确定给MyPane ...

  4. WPF/Silverlight Layout 系统概述——Measure(转)

    前言 在WPF/Silverlight当中,如果已经存在的Element无法满足你特殊的需求,你可能想自定义Element,那么就有可能会面临重写MeasureOverride和ArrangeOver ...

  5. 对WPF中MeasureOverride 和ArrangeOverride 浅理解

    以前对MeasureOverride 和ArrangeOverride十分费解,看到了这篇博文茅塞顿开~ public class CustomControl1 : Panel { /// <s ...

  6. WPF MeasureOverride和 ArrangeOverride做个 页面导航

    public class NavigationPanel:Panel { protected override Size MeasureOverride(Size availableSize) { S ...

  7. Understanding the WPF Layout System

    Many people don't understand how the WPF layout system works, or how that knowledge can help them in ...

  8. MeasureOverride 和 ArrangeOverride

    原文:MeasureOverride 和 ArrangeOverride FrameworkElement.MeasureOverride方法实现当在派生类中重写时,测量子元素在布局中所需的大小,然后 ...

  9. MeasureOverride和ArrangeOverride 练手项目

    public class Diagnol:Panel { /// <summary> /// 测量 /// </summary> /// <param name=&quo ...

随机推荐

  1. powershell上传证书

    https://www.cnblogs.com/threestone/p/4001632.html powershell上传证书

  2. zookeeper相关

    1.zookeeper应用:集群节点间的数据同步(资源管理),分布式锁(主要是利用客户端在一个会话中在zookeeper中创建一个znode节点,然后再去执行自己的业务代码,比如去更新数据库,其他客户 ...

  3. HXY玩卡片(水题测试2017082401&洛谷2192)

    题目链接:HXY玩卡片 很水, 简单讲一下思路. 如果没有0,直接无解,因为不可能是10的倍数. 是9的倍数,则各个数位上的数字和为9的倍数,所以5的数量一定是9的倍数,所以只要尽可能多输出9的倍数个 ...

  4. 47.iOS跳转AppStore评分和发送邮件

    1.跳转到AppStore评分 应用地址是关键:IOS 设备,手机搜索应用,拷贝链接 NSString *appStr =@"https://itunes.apple.com/cn/app/ ...

  5. mysql之表与表关联和表操作

    一 表于表之间的关联 foregin key:设置外键表于表之间建立关联. 多对一关联: 创建步骤,应该先创建好被关联的那一张表,然后再去创建关联的那一张表. 关联表的多条对应着被关联的那张表的一条记 ...

  6. 747. Largest Number At Least Twice of Others

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  7. 2019.01.09 bzoj3697: 采药人的路径(点分治)

    传送门 点分治好题. 题意:给出一棵树,边分两种,求满足由两条两种边数相等的路径拼成的路径数. 思路: 考虑将边的种类转化成边权−1-1−1和111,这样就只用考虑由两条权值为000的路径拼成的路径数 ...

  8. 2018.06.27Firing(最大权闭合子图)

    Firing Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 11558 Accepted: 3494 Description ...

  9. jquery遍历之parent()与parents()的区别 及 parentsUntil() 方法

    来自:http://blog.csdn.net/zm2714/article/details/8117746 .parent(selector) 获得当前匹配元素集合中每个元素的父元素,由选择器筛选( ...

  10. layer.alert没有垂直居中

    经查找是因为 <!DOCTYPE html> 这句没有写在整个页面的最顶部,将其放在整个页面的第一行就可以了. ps:原理不是很清楚