При создании пользовательского Panel
нам необходимо переопределить FrameworkElement.MeasureOverride(Size availableSize)
и FrameworkElement.ArrangeOverride(Size finalSize)
для организации нашего пользовательского макета элементов.На странице MSDN FrameworkElement.ArrangeOverride указывается, что возвращаемое значение типа System.Windows.Size
должно быть «Фактический используемый размер».
Однако, если фактический размер, используемый элементами, меньшечем размер контейнера, то содержимое элемента центрируется в контейнере.Под этим я подразумеваю, что прямоугольник границ возвращаемого размера содержит все элементы и центрирован в контейнере.
Я попытался установить свойства HorizontalContentAlignment
и VerticalContentAlignment
для ListBox
, который использует мой пользовательскийPanel
, но это не имело значения.Странно, однако, что если я возвращаю нескорректированную входную переменную finalSize
вместо фактического используемого размера, то мои элементы выглядят так, как ожидалось, и пользовательский Panel
работает нормально.Может ли кто-нибудь просветить меня, почему это так?Кроме того, возможно ли расположить прямоугольник границ, содержащий элементы, при возврате фактического размера?