public void MoveAlongWith(UserControl parent)
{
if (parent == null) return;
MatrixTransform parent_matrix = (MatrixTransform)parent.RenderTransform;
Matrix matrix = new Matrix();
matrix.M11 = parent_matrix.Matrix.M11; matrix.M12 = parent_matrix.Matrix.M12;
matrix.M21 = parent_matrix.Matrix.M21; matrix.M22 = parent_matrix.Matrix.M22;
matrix.OffsetX = parent_matrix.Matrix.OffsetX; matrix.OffsetY = parent_matrix.Matrix.OffsetY;
double dx = (parent.ActualWidth / 2) - (this.ActualWidth / 2);
matrix.TranslatePrepend(dx, parent.ActualHeight);
this.RenderTransform = new MatrixTransform(matrix);
}