in src/Microsoft.Xaml.Behaviors/Layout/MouseDragElementBehavior.cs [347:418]
internal static Transform CloneTransform(Transform transform)
{
ScaleTransform scaleTransform = null;
RotateTransform rotateTransform = null;
SkewTransform skewTransform = null;
TranslateTransform translateTransform = null;
MatrixTransform matrixTransform = null;
TransformGroup transformGroup = null;
if (transform == null)
{
return null;
}
Type transformType = transform.GetType();
if ((scaleTransform = transform as ScaleTransform) != null)
{
return new ScaleTransform()
{
CenterX = scaleTransform.CenterX,
CenterY = scaleTransform.CenterY,
ScaleX = scaleTransform.ScaleX,
ScaleY = scaleTransform.ScaleY,
};
}
else if ((rotateTransform = transform as RotateTransform) != null)
{
return new RotateTransform()
{
Angle = rotateTransform.Angle,
CenterX = rotateTransform.CenterX,
CenterY = rotateTransform.CenterY,
};
}
else if ((skewTransform = transform as SkewTransform) != null)
{
return new SkewTransform()
{
AngleX = skewTransform.AngleX,
AngleY = skewTransform.AngleY,
CenterX = skewTransform.CenterX,
CenterY = skewTransform.CenterY,
};
}
else if ((translateTransform = transform as TranslateTransform) != null)
{
return new TranslateTransform()
{
X = translateTransform.X,
Y = translateTransform.Y,
};
}
else if ((matrixTransform = transform as MatrixTransform) != null)
{
return new MatrixTransform()
{
Matrix = matrixTransform.Matrix,
};
}
else if ((transformGroup = transform as TransformGroup) != null)
{
TransformGroup group = new TransformGroup();
foreach (Transform childTransform in transformGroup.Children)
{
group.Children.Add(CloneTransform(childTransform));
}
return group;
}
Debug.Assert(false, "Unexpected Transform type encountered");
return null;
}