private void UpdateRenderTransform() { double canvasWidth = canvas.ActualWidth; double canvasHeight = canvas.ActualHeight; MatrixTransform baseTransform = DxfUtil.GetScaleWMMatrixTransform( (Point2D)bounds.Corner1, (Point2D)bounds.Corner2, (Point2D)bounds.Center, new Point2D(1d, canvasHeight), new Point2D(canvasWidth, 1d), new Point2D(0.5d * (canvasWidth + 1d), 0.5d * (canvasHeight + 1d)) ); TransformGroup transformGroup = new TransformGroup(); transformGroup.Children.Add(baseTransform); transformGroup.Children.Add(new TranslateTransform() { X = -canvasWidth / 2d, Y = -canvasHeight / 2d }); transformGroup.Children.Add(new ScaleTransform() { ScaleX = scaling, ScaleY = scaling }); transformGroup.Children.Add(new TranslateTransform() { X = canvasWidth / 2d, Y = canvasHeight / 2d }); transformGroup.Children.Add(new TranslateTransform() { X = translation.X * canvasWidth / 2d, Y = -translation.Y * canvasHeight / 2d }); canvas.RenderTransform = transformGroup; }