![enter image description here](https://i.stack.imgur.com/dffkD.png)
На рисунке показаны эти небольшие пробелы.Большие синие контейнеры между пробелами являются держателями содержимого, ширина которых определяется.Красная граница - это изменяемый размер держателя .
Таким образом, два внешних пробела описывают левый и правый отступ красного держателя .Два пробела рядом с каждым контейнером - это левый и правый поля каждого контейнера .
Каждый раз, когда я изменяю размер держателя SizeChanged
событие этого становится.
gapsize = (holderWidth - summedUpWidthsOfAllContainers) / numberOfGaps
Я получаю holderWidth через свойство ActualWidth
(UIElement).Я перепривязываю (Silverlight hack) MarginProperty каждого контейнера и PaddingProperty держателя каждый раз, когда возникает событие SizeChanged
(UpdateTarget
не работает в Silverlight и INotifyPropertyChanged
не доступно).Это делается с помощью метода UpdateMargins()
, который вызывается в обработчике событий SizeChanged
.
Я пытаюсь предотвратить невидимое обновление полей (менее одного пикселя), сравнивая предыдущие и новые поля.
Но при таком подходе я время от времени вызываю циклы компоновки.Теперь я просто хотел спросить, есть ли логическая ошибка.Я прочитал этот блог и попытался решить его таким образом.Но эти циклы макета все еще появляются.
Я делаю это для центрирования держателей контента ( контейнеров ) каждый раз, когда размер держателя изменяется.Я знаю, что решетка с двумя столбцами также была бы жизнеспособным решением.Но проблема в том, что красный держатель должен быть WrapPanel, что в этом случае второй синий контейнер переходит под первый, если держатель становится слишкоммаленький, чтобы показать их рядом друг с другом.