Как переставить детей холста на ArrangeOverride wpf

У меня есть холст, где дети динамически добавляются к холсту. Допустим, изображение размещено слева = 50, сверху 50 при ширине холста (500) и высоте (200). Когда окно развернуто до максимума, изменяются ширина и высота холста ( 1000, 400), на этот раз требуется изменить положение изображения в соответствии с шириной и высотой холста. На основании исследований выяснилось, что надо внедрять

Методы MeasureOverride и ArrangeOverride панели.

Здесь пользователь может добавить любое количество элементов на холст, желая масштабировать дочерних элементов относительно размера холста.

Как реализовать логику в описанных выше методах?

1 ответ

Вы могли бы реализовать свою логику (что бы это ни было) в обработчике событий для SizeChanged событие:

private void Canvas_SizeChanged(object sender, SizeChangedEventArgs e)
{
    Canvas canvas = sender as Canvas;
    Size size = e.NewSize;
    foreach (UIElement child in canvas.Children)
    {
        //set the new postion of each element according to your logic
        Canvas.SetLeft(child, );
    }
}

<Canvas x:Name="canvas" Width="500" Height="200" Background="Yellow" SizeChanged="Canvas_SizeChanged">
    <Button Content="..." Canvas.Left="50" Canvas.Top="50" />
</Canvas>

Нет причин создавать кастомы Panel и переопределить MeasureOverride а также ArrangeOverride методы.

Другие вопросы по тегам