首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF MeasureOverride和ArrangeOverride

WPF MeasureOverride和ArrangeOverride
EN

Stack Overflow用户
提问于 2014-07-02 09:29:49
回答 2查看 5.6K关注 0票数 6

我在这里的问题更多的是理论问题,而不是功能性问题。所以我要找的是一个答案,也许可以用一些文档来备份。

我发现自己在这样的情况下,我需要为一个wpf控件的孩子做一些定制的测量/安排?

  1. 可以根据其他大小约束而不是作为参数所接收的约束来度量子级。
  2. 我想要达到的一些伪码: MeasureOverride(大小){foreach(子){if(条件){child.measure(大小)} in { child.measure(customSize) if(.){.}

所有的逻辑都是在MeasureOverride中吗?还是应该用接收到的大小作为参数调用度量值,然后在ArrangeOverride中执行逻辑?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-02 09:46:33

我想你可以用任何尺寸的。MeasureOverride方法的参数指定控件可用的大小。控件可以返回它需要的任何DesiredSize,即使它比AvailableSize大。

子控件也会这样做。对子级调用度量值的结果是设置了该孩子的DesiredSize。这也可以是任何东西,取决于孩子的测量逻辑。在MeasureOverride方法中,可以使用逻辑来理解返回的DesiredSizes。

如果您有度量逻辑,那么它绝对应该存在于MeasureOverride方法(或助手方法)中,而不是在ArrangeOverride中。ArrangeOverride只用于定位。

我肯定你已经查过了,但我还是会发链接的。http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.measureoverride%28v=vs.110%29.aspx

票数 4
EN

Stack Overflow用户

发布于 2015-01-17 07:33:47

另外几点:

  • 您的伪代码丢失了,您需要返回MeasureOverride()中使用的总大小。您需要将子级DesiredSize合并到控件打算使用的总大小中。您不能返回availableSize,这可能是无限的。
  • 在MeasureOverride()中接收无限大小时,不能返回无穷大,但0可以。在这种情况下,ArrangeOverride()将接收所有可用的大小。
  • 当您进行大小计算时,请注意不要创建负值。当DesiredSize大于可用大小时,很容易发生这种情况。像这样处理它: double remainingWidth = Math.Min(0, availabeSize.Width - DesiredSize.Width);
  • 您可能需要在MeasureOverride()中重复ArrangeOverride()中的逻辑形式。在MeasureOverride()中使用ArrangeOverride()中计算的值时要小心,因为可用的大小通常是不同的。
  • 确保为每个孩子调用度量衡()和安排()。如果没有,您将不会收到任何错误消息,但是Framework将使用可能错误的大小参数调用它们。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24527529

复制
相关文章

相似问题

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