Я работаю над пользовательским элементом управления с пользовательской панелью, и внутри пользовательской панели у меня есть небольшой и простой метод MeasureOverride
, который передает размер double.PositiveInfinity
своему дочернему методу MeasureOverride
. Пользовательская панель должна заботиться о макете и должна делать дочерние элементы больше или меньше в зависимости от размера окна.
Если вы имели дело с элементами управления, вы должны знать, как работает система компоновки wpf и что в основном каждый дочерний элемент вызывает MeasureOverride, который вызывает MeasureOverride дочерних элементов и так далее.
Теперь проблема в том, что когда я изменяю размер окна, настраиваемая панель получает флаг для повторного измерения, поэтому MeasureOverride
вызывается снова, но на этот раз при передаче размера double.PositiveInfitinty
своим дочерним элементам дочерние элементы MeasureOverride
не получают вызывается вообще (но метод должен вызываться в соответствии с определением системы компоновки WPF). Почему это так? Я всегда думал, что когда я вызываю MeasureOverride
для родителя, дети также будут вынуждены делать это.
Очевидно, я ошибаюсь, так что может ли кто-нибудь объяснить мне, как контрольная группа/ребенок узнает, когда проводить повторные измерения?
Кстати, я передаю детям размер double.PositiveInfinity
, чтобы они занимали столько места, сколько нужно.
Код:
protected override Size MeasureOverride(Size availableSize)
{
double x;
double y;
var children = this.InternalChildren;
for (int i = 0; i < children.Count; i++)
{
UIElement child = children[i];
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity);
y += child.DesiredSize.Height;
x = Math.Max(x, child.DesiredSize.Width);
}
return new Size(x, y);
}
Код прост. Я не понимаю, почему детей снова не измеряют. И извините, если я что-то неправильно написал в коде.
MeasureOverride
вашей пользовательской панели. - person Benjamin Gale   schedule 08.02.2013