Path currentPath = (Path)up.Content; Geometry oldGeometry = currentPath.Data; //Add the Path Transform to the Geometry Transform: TransformGroup tg = new TransformGroup(); if (oldGeometry.Transform != null) tg.Children.Add(oldGeometry.Transform); tg.Children.Add(up.RenderTransform); oldGeometry.Transform = new MatrixTransform(tg.Value); // Use the new Bounds to determine new offset double newLeft = oldGeometry.Bounds.Left; double newTop = oldGeometry.Bounds.Top; TranslateTransform tt = new TranslateTransform(-newLeft, -newTop); // and add that to the Geometry Transform: tg.Children.Add(tt); oldGeometry.Transform = new MatrixTransform(tg.Value); // Adjust the position of the UserControl to compensate: up.SetValue(Canvas.LeftProperty, ((double)up.GetValue(Canvas.LeftProperty)) + newLeft); up.SetValue(Canvas.TopProperty, ((double)up.GetValue(Canvas.TopProperty)) + newTop); //Adjust for new size: up.Width = oldGeometry.Bounds.Width; up.Height = oldGeometry.Bounds.Height; //Get rid of the original UserControl transformation. up.RenderTransform = Transform.Identity;May be possible to simplify it but at least it works......