Как работает ограничение размера WPF? - PullRequest
1 голос
/ 16 января 2011

Я реализовал систему GUI, в значительной степени вдохновленную системой макетов WPF Measure and Arrange для игры. Хотя он отлично работает с DockPanels и StackPanels, недавно мне понадобилось использовать WrapPanels. Я обнаружил, что в своем нынешнем состоянии моя система с графическим интерфейсом не поддерживает перенос, потому что мне нужно знать максимальный доступный размер на основе предков, и мои измерения в настоящее время выполняются без этой информации.

Я проверил документацию WPF и обнаружил, что их метод Measure принимает ограничение размера в качестве параметра: Size Measure(Size availableSize). Это озадачивает меня. Насколько я понимаю, WPF сначала выполняет измерение от листьев до корня, а затем - от корня до листьев. Однако, в этом случае, доступный размер от предков необходим в то время как в фазе измерения. Это кажется мне противоречивым, поскольку размер предков зависит от размера их потомков.

Как WPF предоставляет это availableSize значение в проходе измерения?

1 Ответ

2 голосов
/ 16 января 2011

Я думаю, что вы понимаете, что измерение неверно - оно происходит от корня к листьям, а не к корню. Действительно, родительский контроль обязан вызывать Measure() на своих дочерних элементах во время собственного прохода измерения. Таким образом, родитель может выяснить, сколько места доступно его дочерним элементам, и он может передать это при измерении.

...