zoukankan      html  css  js  c++  java
  • 用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

        }

  • 相关阅读:
    友链
    CF496E Distributing Parts(贪心)题解
    CF786C Till I Collapse(根号分治)题解
    CF578B "Or" Game(贪心)题解
    CF433C Ryouko's Memory Note(贪心)题解
    Luogu4177 [CEOI2008]order(网络流)题解
    骗分专辑
    CF718A Efim and Strange Grade(贪心)题解
    prufer序列--学习笔记
    bzoj3450 Tyvj1952 Easy(期望DP)题解
  • 原文地址:https://www.cnblogs.com/bear831204/p/1305569.html
Copyright © 2011-2022 走看看