in src/Microsoft.Xaml.Behaviors/Layout/MouseDragElementBehavior.cs [290:339]
internal void ApplyTranslationTransform(double x, double y)
{
Transform renderTransform = this.RenderTransform;
// todo jekelly: what if its frozen?
TranslateTransform translateTransform = renderTransform as TranslateTransform;
if (translateTransform == null)
{
TransformGroup renderTransformGroup = renderTransform as TransformGroup;
MatrixTransform renderMatrixTransform = renderTransform as MatrixTransform;
if (renderTransformGroup != null)
{
if (renderTransformGroup.Children.Count > 0)
{
translateTransform = renderTransformGroup.Children[renderTransformGroup.Children.Count - 1] as TranslateTransform;
}
if (translateTransform == null)
{
translateTransform = new TranslateTransform();
renderTransformGroup.Children.Add(translateTransform);
}
}
else if (renderMatrixTransform != null)
{
Matrix matrix = renderMatrixTransform.Matrix;
matrix.OffsetX += x;
matrix.OffsetY += y;
MatrixTransform matrixTransform = new MatrixTransform();
matrixTransform.Matrix = matrix;
this.RenderTransform = matrixTransform;
return;
}
else
{
TransformGroup transformGroup = new TransformGroup();
translateTransform = new TranslateTransform();
// this will break multi-step animations that target the render transform
if (renderTransform != null)
{
transformGroup.Children.Add(renderTransform);
}
transformGroup.Children.Add(translateTransform);
this.RenderTransform = transformGroup;
}
}
Debug.Assert(translateTransform != null, "TranslateTransform should not be null by this point.");
translateTransform.X += x;
translateTransform.Y += y;
}