我写了一个类似于内置StackPanel的面板。除了一个小问题我工作得很好:
更改子项的布局属性并不总是会导致调用面板的MeasureOverride和ArrangeOverride。当孩子的Visibility属性发生变化时, 总是被调用,而当Width和Height属性发生变化时,不是。
我还没有设法在一个足够小的样本中重现这种行为以适合包含在StackOverflow上的问题中:但是因为它在我制作的简单样本中工作正常,我知道我必须做一些可以避免的事情我的实际小组。
所以我的问题:在更改与尺寸相关的属性时,元素在哪些情况下不会使其父项无效?
我也标记了这个wpf(我使用Silverlight)来拥有更广泛的受众 - 我怀疑这将同样适用于两个xaml实现。
答案 0 :(得分:0)
我知道我的错误是什么,在哪种情况下,面板的MeasureOverride不再被调用与尺寸相关的属性的某些更改。
我的小组名为“测量儿童应该具有的确切尺寸的儿童”,而不是面板的尺寸。
当一个小组开始想要比在上一次测量调用中告诉他们更多的空间时,面板不会得到它的MeasureOverride方法 - 这是有道理的。
摘要:您在子项上调用的Measure方法的参数必须表示父面板分配给所有子项的空间,而不仅仅是调用一个Measure。
答案 1 :(得分:-1)
您必须确保调用基本方法MeasureOverride。
protected override Size MeasureOverride(Size availableSize)
{
// you must call this
var throwaway = base.MeasureOverride(availableSize);
// your code here
return yourNewSize;
}