internal void ApplyTranslationTransform()

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;
        }