Остановить загрузку элементов управления на панели Wrap после ее заполнения

В одном из моих предыдущих приложений мне нужно было динамически добавлять элементы управления на панель flowlayout в проекте winforms, но мне нужно было, чтобы они прекратили загрузку, как только на панели не осталось места для них.

Для этого я написал: https://github.com/LucasMoffitt/WordFiller/blob/master/WordFiller.Controls/WordLayoutPanel.cs

По сути, это просто устанавливает для свойства значение false, если входящий элемент управления касается прямоугольника, который я рисую внизу панели.

Пытаясь воспроизвести это поведение в WPF, я не могу найти способ заставить WrapPanel прекратить принимать элементы управления, если он заполнен.

Я попытался переопределить методы Arrange и Measure, но они вызываются только после добавления всех элементов управления. Мне нужно иметь возможность остановить загрузку элементов управления вообще.

У кого-нибудь есть идеи?


person Lucas    schedule 23.03.2012    source источник


Ответы (2)


В итоге я принял некоторые предложения и пришел к следующему:

https://github.com/LucasMoffitt/CustomWrapPanel

в основном это то, что я делал для начала, просто немного аккуратнее, и есть демонстрационное приложение.

Я поощряю все вклады, если кто-то найдет более приятный способ сделать это!

person Lucas    schedule 29.03.2012

Вы можете сравнить ActualHeight/AcxtualWidth с DesiredHeight/DesiredWidth. Когда DesiredHeight становится больше ActualHeight - панель начинает перекрываться.

person Vladimir Perevalov    schedule 23.03.2012
comment
Когда я проверю это? Я должен был бы следить за тем, что было добавлено до сих пор. - person Lucas; 23.03.2012
comment
Если вы добавляете элементы управления динамически, то у вас есть код для этого, между каждым добавлением вы должны проверять свойства. - person Vladimir Perevalov; 23.03.2012
comment
Спасибо за вашу помощь. Я подумал о том, что вы сказали, и поэкспериментировал с некоторыми разными подходами, см. мой ответ ниже! Спасибо еще раз! - person Lucas; 29.03.2012