根据MSDN - Panel.InternalChildren属性:
从Panel派生的类 应该使用此属性而不是Children 属性来进行内部重写,例如MeasureCore 和ArrangeCore.
所以,这实际上是一个2部分的问题:
如果我创建了一个我自己的Panel FooPanel,它来自Panel,我似乎无法覆盖MeasureCore或ArrangeCore.我不确定为什么那句话甚至存在.但是,我可以覆盖MeasureOverride和ArrangeOverride.所以,我想知道我是否还需要使用InternalChildren这两种方法的属性.
Children物业和InternalChildren物业之间的真正区别是什么?
我在这里的问题更多是理论问题而不是功能问题。所以我正在寻找的是一个可以用一些文档来支持的答案。
我发现自己需要为 wpf 控件的子项进行一些自定义测量/安排?
我试图实现的一些伪代码:
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 中执行逻辑?谢谢!
我被困了两天试图理解WPF的布局原理。
我读了很多文章并探索了 wpf 源代码。
我知道测量/测量覆盖方法接受可用大小,然后设置 DesiredSize 属性。这是有道理的。它递归地调用孩子们并要求他们设置各自所需的大小。
有两件事(至少)我不明白。让我们考虑一个 WrapPanel。
我认为我对这两种方法的机制存在一些根本性的误解。
任何人都可以给我一个 DesiredSize 和/或AvailableSize 的口头描述,使这个实现有意义吗?
基本上,我有一个基于DependencyProperty(FooProperty)绘制子项的面板.
如果FooProperty为真,则安排孩子; 否则,没有安排.第一个直通很好,但是当一个孩子将它的FooProperty从true(draw)更改为false(不绘制)时,该ArrangeOverride方法会跳过它并且孩子仍然被绘制.
我想要而不是跳过那些不应该画的孩子我需要一些方法来画它们吗?