public static FormattedText GetFormattedText(RichTextEdit rich) { var doc = rich.Document; var output = new FormattedText( GetText(doc), System.Globalization.CultureInfo.CurrentCulture, doc.FlowDirection, new Typeface(doc.FontFamily, doc.FontStyle, doc.FontWeight, doc.FontStretch), doc.FontSize, doc.Foreground, VisualTreeHelper.GetDpi(rich).PixelsPerDip); int offset = 0; foreach (TextElement textElement in GetRunsAndParagraphs(doc)) { var run = textElement as Run; if (run != null) { int count = run.Text.Length; output.SetFontFamily(run.FontFamily, offset, count); output.SetFontSize(run.FontSize, offset, count); output.SetFontStretch(run.FontStretch, offset, count); output.SetFontStyle(run.FontStyle, offset, count); output.SetFontWeight(run.FontWeight, offset, count); output.SetForegroundBrush(run.Foreground, offset, count); output.SetTextDecorations(run.TextDecorations, offset, count); offset += count; } else { offset += Environment.NewLine.Length; } } return(output); }