标签: arrangeoverride

WPF Panel.Children与Panel.InternalChildren - 有什么区别?

根据MSDN - Panel.InternalChildren属性:

Panel派生的类 应该使用此属性而不是Children 属性来进行内部重写,例如MeasureCoreArrangeCore.


所以,这实际上是一个2部分的问题:

  1. 如果我创建了一个我自己的Panel FooPanel,它来自Panel,我似乎无法覆盖MeasureCoreArrangeCore.我不确定为什么那句话甚至存在.但是,我可以覆盖MeasureOverrideArrangeOverride.所以,我想知道我是否还需要使用InternalChildren这两种方法的属性.

  2. Children物业和InternalChildren物业之间的真正区别是什么?

wpf children panel measureoverride arrangeoverride

9
推荐指数
1
解决办法
3120
查看次数

WPF 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 中执行逻辑?谢谢!

c# wpf wpf-controls measureoverride arrangeoverride

6
推荐指数
1
解决办法
5096
查看次数

MeasureOverride 和 ArrangeOverride。真正的AvailableSize/DesiredSize 是什么?

我被困了两天试图理解WPF的布局原理。

我读了很多文章并探索了 wpf 源代码。

我知道测量/测量覆盖方法接受可用大小,然后设置 DesiredSize 属性。这是有道理的。它递归地调用孩子们并要求他们设置各自所需的大小。

有两件事(至少)我不明白。让我们考虑一个 WrapPanel。

  • 查看 WPF 源代码,MeasureOverride() 方法接受可用大小,然后将其传递给所有子级。然后,它返回子项中生成的desiredsize属性的最大宽度最大高度。它不应该在孩子之间划分可用空间吗?我认为它会迭代子级,然后测量第一个,然后从总可用大小中减去所得的所需大小,以便下一个子级占据更少的空间。当我阅读 WPF 时,WrapPanel.MeasureOverride 似乎没有设置适合所有子项所需的所需大小。它只是给出了任何一个孩子都适合的 DesiredSize。
  • 由于包装面板的性质,我预计对于垂直方向的堆栈面板,高度限制将导致更宽的 DesiredSize (以容纳更多列)。由于高度限制会影响环绕面板的所需大小,因此该逻辑不属于 MeasureOverride 方法吗?为什么堆叠只反映在 ArrangeOverride 方法中?

我认为我对这两种方法的机制存在一些根本性的误解。

任何人都可以给我一个 DesiredSize 和/或AvailableSize 的口头描述,使这个实现有意义吗?

wpf measureoverride arrangeoverride

4
推荐指数
1
解决办法
1670
查看次数

WPF:如何从自定义面板中"取消"子项?

基本上,我有一个基于DependencyProperty(FooProperty)绘制子项的面板.

如果FooProperty为真,则安排孩子; 否则,没有安排.第一个直通很好,但是当一个孩子将它的FooProperty从true(draw)更改为false(不绘制)时,该ArrangeOverride方法会跳过它并且孩子仍然被绘制.

我想要而不是跳过那些不应该画的孩子我需要一些方法来画它们吗?

wpf dependency-properties panel arrangeoverride

1
推荐指数
1
解决办法
438
查看次数