WPF MeasureOverride 和ArrangeOverride

use*_*535 6 c# wpf wpf-controls measureoverride arrangeoverride

我在这里的问题更多是理论问题而不是功能问题。所以我正在寻找的是一个可以用一些文档来支持的答案。

我发现自己需要为 wpf 控件的子项进行一些自定义测量/安排?

  1. 是否可以根据其他大小限制而不是作为参数接收的限制来测量孩子。
  2. 我试图实现的一些伪代码:

    MeasureOverride(size)
     {
       foreach(child in children)
       { 
         if(condition)
         {
           child.measure(size)
         }
         else
         { 
           child.measure(customSize)
           if(...)
           {
             ...
           }
           ...
         }
       }
     }
    
    Run Code Online (Sandbox Code Playgroud)

这个的所有逻辑都应该存在于 MeasureOverride 中,还是我应该只使用作为所有子项的参数接收的大小调用 measure,然后在ArrangeOverride 中执行逻辑?谢谢!

flo*_*dea 4

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

子控件也会执行相同的操作。对子项调用 Measure 的结果是设置该子项的 DesiredSize。同样,这可以是任何东西,具体取决于孩子的测量逻辑。在 MeasureOverride 方法中,您可以使用逻辑来理解返回的 DesiredSizes。

如果您有测量逻辑,它绝对应该位于 MeasureOverride 方法(或辅助方法)中,而不是位于 ArrangeOverride 中。ArrangeOverride 仅用于定位。

我确信您已经检查过此内容,但我仍然会发布链接。 http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.measureoverride%28v=vs.110%29.aspx