首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助理解WPF MeasureOverride和ArrangeOverride无穷大和0大小

需要帮助理解WPF MeasureOverride和ArrangeOverride无穷大和0大小
EN

Stack Overflow用户
提问于 2010-04-07 04:36:53
回答 1查看 7.5K关注 0票数 5

我正在尝试构建一个包含一个子元素的简单面板,并将其捕捉到最接近的网格大小。我很难弄清楚如何通过覆盖MeasureOverride和ArrangeOverride来做到这一点。

这是我想要的:我希望我的面板告诉它的所有者(a)它想要尽可能大,然后(b)当它发现那个大小时,它会根据最近的较小的捕捉点来调整它自己和它的子UIElement的大小。因此,如果我们捕捉到10,并且我可以在一个不大于192x184的区域中,面板将告诉它的父容器“我的实际大小将是190x180”。这样,与我的控件相邻的任何东西都可以与其边缘对齐,而不是潜在的空间。

当我将面板放在网格中时,覆盖中的传入大小会得到0或PositiveInfinity (我忘记了),但我需要知道的是“我的空间到底能有多大?”不是无穷大..

我认为问题的一部分是WPF认为PositiveInfinity的魔术值和大小的0。我需要一种方式来说,通过MeasureOverride“我可以像你允许的那样大”,并在ArrangeOverride中实际大小到快照大小。

还是说我完全走错了路?测量和排列看起来非常复杂,只是在Reflector中的标准面板的代码中徘徊了一下。

EN

回答 1

Stack Overflow用户

发布于 2010-04-07 12:17:53

在测量步骤中,如果WPF发送给你无穷大,你应该告诉它你想要多大。如果它发送0,那么你的布局就没有空间了。在排列步骤中,您将被告知有多少空间可用于布局,这很可能与在测量步骤中给出的大小不同。无论哪一步,你都不能返回无穷大。下面的代码应该可以完成您想要的功能(请注意,我假设的是UIElement的子属性):

代码语言:javascript
复制
protected overrride Size MeasureOverride(Size availableSize)
{
    Child.Measure(availableSize);
    return Child.DesiredSize;
}

protected override Size ArrangeOverride(Size finalSize)
{
    int w = (((int)finalSize.Width) / SnapPrecision) * SnapPrecision;
    int h = (((int)finalSize.Height) / SnapPrecision) * SnapPrecision;

    Child.Arrange(new Rect(0, 0, w, h));
    return new Size(w, h);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2588111

复制
相关文章

相似问题

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