Вопрос о методе WPF FrameworkElement.ArrangeOverride (Size finalSize) - PullRequest
1 голос
/ 23 февраля 2011

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

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

Я попытался установить свойства HorizontalContentAlignment и VerticalContentAlignment для ListBox, который использует мой пользовательскийPanel, но это не имело значения.Странно, однако, что если я возвращаю нескорректированную входную переменную finalSize вместо фактического используемого размера, то мои элементы выглядят так, как ожидалось, и пользовательский Panel работает нормально.Может ли кто-нибудь просветить меня, почему это так?Кроме того, возможно ли расположить прямоугольник границ, содержащий элементы, при возврате фактического размера?

1 Ответ

1 голос
/ 23 февраля 2011

Размер, возвращаемый MeasureOverride и ArrangeOverride, - это размер элемента, выполняющего возврат, а не размер его содержимого. Просто дайте вашей панели фон, и это тот размер, о котором мы говорим.

Вы можете расположить только верхний левый угол панели (или любого другого элемента) вместе с ее родительским контейнером. В общем случае вы можете выбрать только Margin="x,y,0,0", чтобы обеспечить положительные или отрицательные смещения относительно верхнего левого угла, который дает вам контейнер, или использовать Canvas в качестве родительского контейнера и использовать Canvas.Top и Canvas.Left. * 1009. *

...