首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MeasureOverride在画布上不起作用

MeasureOverride在画布上不起作用
EN

Stack Overflow用户
提问于 2014-08-06 15:46:35
回答 1查看 356关注 0票数 1

我需要改变放置在画布上的矩形大小,所以我继承了Canvas类来使用MeasureOverride:

代码语言:javascript
复制
public class CustomCanvas : Canvas
{
    public CustomCanvas() : base(){}

    protected override Size MeasureOverride(Size availableSize)
    {
        Size canvasDesiredSize = new Size();

        foreach (UIElement child in Children)
        {
            child.Measure(new Size(300, 300));
            canvasDesiredSize = child.DesiredSize;
        }

        return canvasDesiredSize;
    }
}

并使用它:

代码语言:javascript
复制
<local:CustomCanvas Width="500" Height="800" Background="Gray">
        <Rectangle Fill="AliceBlue" Height="100" Width="100"/>
    </local:CustomCanvas>

但是在执行之后,矩形仍然是100,100大小(在XAML中指定)。当执行child.Measure(new Size(300, 300));时,child.DesiredSize显示为0,0。那里发生了一些奇怪的事情。

我使用this作为参考。

EN

回答 1

Stack Overflow用户

发布于 2015-01-17 16:45:30

简而言之,宽度和高度会覆盖Measure()中给定的任何大小。

微软的文档缺少有关Measure()和MeasureOverride()之间数据流的重要信息。

容器调用Child.Measure()

Measure()调用MeasureCore()

MeasureCore()调用MeasureOverride()

测量是UIElement的一种方法。

MeasureCore是FrameworkElement的一种方法,继承自UIElement。MeasureOverride是FrameworkElement的一种方法。MeasureOverride被子级重写。

在调用MeasurementCore()之前,UIElement.Measure(avialableSize)会执行以下操作

  • 引发异常if avialableSize IsNan,对于宽度和高度都是如此
  • 如果UIElement折叠,MeasureCore将不会被调用
  • 如果availableSize没有更改,则不会调用MeasureCore,除非在
  • 调用
  • 之前调用了InvalidateMeasure

在调用MeasureOverride()之前,FrameworkElement.MeasurementCore(availableSize)会执行以下操作

对于witdh properties,

  • 删除了availableSize
  • enforces height、minHeight和maxHeight在availableSize上的边距

调用MeasureOverride()后,MeasurementCore()会调整MeasureOverride()的返回值,计算出DesiredSize:

  • DesiredSize必须在MinWidth和MaxWidth
  • 中添加保证金到DesiredSize

在调用FrameworkElement.MeasurementCore()之后,UIElement.Measure()执行:

如果return width或height为Infinite

  • throws exception if return width或height isNaN

,将抛出异常

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25154902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档