public static void ScrollToAvalonEdit(this ScrollViewer scrollViewer, TextArea textArea, int line, int column)
 {
     scrollViewer.ScrollToAvalonEdit(textArea, line, column, VisualYPosition.LineMiddle, (scrollViewer != null) ? (scrollViewer.ViewportHeight / 2.0) : 0.0, 0.3);
 }
        public static void ScrollToAvalonEdit(this ScrollViewer scrollViewer, TextArea textArea, int line, int column, VisualYPosition yPositionMode, double referencedVerticalViewPortOffset, double minimumScrollFraction)
        {
            TextView     textView = textArea.TextView;
            TextDocument document = textView.Document;

            if (scrollViewer == null || document == null)
            {
                return;
            }

            if (line < 1)
            {
                line = 1;
            }

            if (line > document.LineCount)
            {
                line = document.LineCount;
            }

            if (!((System.Windows.Controls.Primitives.IScrollInfo)textView).CanHorizontallyScroll)
            {
                VisualLine orConstructVisualLine = textView.GetOrConstructVisualLine(document.GetLineByNumber(line));
                for (double num = referencedVerticalViewPortOffset; num > 0.0; num -= orConstructVisualLine.Height)
                {
                    DocumentLine previousLine = orConstructVisualLine.FirstDocumentLine.PreviousLine;
                    if (previousLine == null)
                    {
                        break;
                    }

                    orConstructVisualLine = textView.GetOrConstructVisualLine(previousLine);
                }
            }

            Point  visualPosition = textArea.TextView.GetVisualPosition(new TextViewPosition(line, Math.Max(1, column)), yPositionMode);
            double num2           = visualPosition.Y - referencedVerticalViewPortOffset;

            if (Math.Abs(num2 - scrollViewer.VerticalOffset) > minimumScrollFraction * scrollViewer.ViewportHeight)
            {
                scrollViewer.AnimateScroll(Math.Max(0.0, num2));
            }

            if (column <= 0)
            {
                return;
            }

            if (visualPosition.X > scrollViewer.ViewportWidth - 60.0)
            {
                double num3 = Math.Max(0.0, visualPosition.X - scrollViewer.ViewportWidth / 2.0);
                if (Math.Abs(num3 - scrollViewer.HorizontalOffset) > minimumScrollFraction * scrollViewer.ViewportWidth)
                {
                    scrollViewer.ScrollToHorizontalOffset(num3);
                }
            }
            else
            {
                scrollViewer.AnimateScroll(0.0);
            }
        }
 public static void ScrollToAvalonEdit(this ScrollViewer scrollViewer, TextArea textArea, int line)
 {
     scrollViewer.ScrollToAvalonEdit(textArea, line, -1);
 }