Maintain the Items' Positions When the Diagram is Resized

Maintaining the Items' Positions When Resizing the RadDiagram

Consider the following scenario. We are working with RadDiagram used over an Image. When we resize the Window/UserControl which contains the RadDiagram and the Image, we want to preserve the relative positions of the Shapes we use.Here is the XAML of a RadDiagram used with Image:

We can use the RadDiagram.SizeChanged event, iterate over the Shapes collection and update the shapes' Position, Width and Height like so:

Below you can see this in action. The Window or UserControl is resized and the Shapes' Position and size are updated:

``````private void RadDiagram_SizeChanged(object sender, SizeChangedEventArgs e)
{
if(e.PreviousSize != null && e.PreviousSize.Width != 0 && e.PreviousSize.Height != 0)
{
double deltaX = (e.NewSize.Width / e.PreviousSize.Width);
double deltaY = (e.NewSize.Height / e.PreviousSize.Height);

{
x.Position = new Point(x.Position.X * deltaX, x.Position.Y * deltaY);
x.Width = x.Width * deltaX;
x.Height = x.Height * deltaY;
});
}
}
``````
``````Private Sub RadDiagram_SizeChanged(sender As Object, e As SizeChangedEventArgs)
If e.PreviousSize IsNot Nothing AndAlso e.PreviousSize.Width <> 0 AndAlso e.PreviousSize.Height <> 0 Then
Dim deltaX As Double = (e.NewSize.Width / e.PreviousSize.Width)
Dim deltaY As Double = (e.NewSize.Height / e.PreviousSize.Height)

x.Position = New Point(x.Position.X * deltaX, x.Position.Y * deltaY)
x.Width = x.Width * deltaX
x.Height = x.Height * deltaY

End Function)
End If
End Sub
``````