• 用MeasureOverride和ArrangeOverride实现元素定位


    FrameworkElement.MeasureOverride Method

    函数原型:

    protected virtual Size MeasureOverride (Size availableSize)

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

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

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

    overrideMeasureOverride方法中要做以下3步:

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

    例如,VisualChildren里存放有所有的子元素:

    protected override Size MeasureOverride(Size availableSize)

    {

        Size desiredSize = new Size();

        foreach (UIElement child in VisualChildren)

        {

            child.Measure(availableSize);

            // do something with child.DesiredSize, either sum them directly or apply whatever logic your element has for reinterpreting the child sizes

            // if greater than availableSize, must decide what to do and which size to return

        }

        // desiredSize = ... computed sum of children's DesiredSize ...;

        // IMPORTANT: do not allow PositiveInfinity to be returned, that will raise an exception in the caller!

        // PositiveInfinity might be an availableSize input; this means that the parent does not care about sizing

        return desiredSize;

    }

     

    FrameworkElement.ArrangeOverride Method

    函数原型:

    protected virtual Size ArrangeOverride (

                   Size finalSize

    )

    参数: A所占的空间

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

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

    例如:

    protected override Size ArrangeOverride(Size finalSize)

        {

            foreach (UIElement child in VisualChildren)

            {

                double x = 50;

                double y = 50;

     

                child.Arrange(new Rect(new Point(x, y), child.DesiredSize));

            }

            return finalSize; // Returns the final Arranged size

        }

  • 相关阅读:
    C3P0的详细配置说明
    关于commons-fileupload组件上传文件中文名乱码问题
    手写JDBC
    使用try-with-resource遇到的问题
    Java基础学习总结——Java对象的序列化和反序列化
    IDEA查看第三方jar包的源代码时出现Decompiled.class file, bytecode version:52.0 (Java 8)的解决方案
    软件工程课程周进度报告 第六周
    地铁合作的第二周
    第六周进度总结
    地铁合作的第一周
  • 原文地址:https://www.cnblogs.com/bear831204/p/1305569.html
Copyright © 2020-2023  润新知