【问题标题】:Why does ArrangeOverride recalculate the final size为什么 ArrangeOverride 会重新计算最终大小
【发布时间】:2014-06-20 16:32:55
【问题描述】:

对我来说,如果 MeasureOverride 计算 FrameworkElement 和 ArrangeOverride just 位置的大小,这将是逻辑子元素。但是 ArrangeOverride 不仅仅排列子元素。它还会再次计算我不明白的 FrameworkElement 的大小。为什么 MeasureOverride 不能计算出最终的尺寸,仅此而已?

【问题讨论】:

    标签: wpf layout measureoverride arrangeoverride


    【解决方案1】:

    因为您的元素可能不是屏幕上唯一的元素。

    布局并不是那么简单。 WPF 必须计算出它必须使用的实际物理空间,然后计算每个元素需要多少空间,如果可以,缩放请求的数量,然后应用它。此外,某些元素可能希望根据分配的确切空间量进行更改。

    This previous answer of mine 给你打个比方。

    【讨论】:

    • 谢谢。特别是链接的答案很好。你有一个例子,最终大小与 MeasureOverride 返回的不同吗?
    • @Sam 不,我没有手头的例子,但你可以通过从 MeasureOverride 返回一个非常大的尺寸来伪造它(并检查结果),该元素包含在被限制在一个人为的小区域(即绝对大小和位置)。
    【解决方案2】:

    如果您使用自己的布局算法并在您的 ArrangeOverride() 调用中实现自己的面板

    child.Arrange(rect1)
    

    如果 rect1 与孩子的 DesiredSize 不同,那么系统可能会任意决定忽略 rect1 的大小并使用不同的东西。我见过 DesiredSize 被使用,我不确定它是否总是如此。我会说这类似于一个错误:)

    如果 rect1 在 Panel 的 MeasureOverride() 过程中计算,则此行为的解决方法是在子级上调用 Measure() 第二次传递 rect1 的大小,因此在 Arrange 之前重新计算子级的 DesiredSize () 通过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多