private static void FillInlines(TextBlock textBlock, InlineCollection prefixInlines, InlineCollection mainInlines) { var textBlockMain = new TextBlock(); var textBlockPrefix = new TextBlock(); if (prefixInlines == null || prefixInlines.Count <= 0 || mainInlines == null || mainInlines.Count <= 0) { foreach (Inline inline in textBlock.Inlines.ToList()) { var inlineKind = (inline.Tag as string); switch (inlineKind) { case "main": if (mainInlines == null || mainInlines.Count <= 0) { textBlockMain.Inlines.Add(inline); } break; case "prefix": if (prefixInlines == null || prefixInlines.Count <= 0) { textBlockPrefix.Inlines.Add(inline); } break; } } } textBlock.Inlines.Clear(); if (prefixInlines != null && prefixInlines.Count > 0) { foreach (Inline inline in prefixInlines.ToList()) { inline.Tag = "prefix"; textBlock.Inlines.Add(inline); } } else { textBlock.Inlines.AddRange(textBlockPrefix.Inlines.ToList()); } if (mainInlines != null && mainInlines.Count > 0) { foreach (Inline inline in mainInlines.ToList()) { inline.Tag = "main"; textBlock.Inlines.Add(inline); } } else { textBlock.Inlines.AddRange(textBlockMain.Inlines.ToList()); } }
private void buttonReport_Click(object sender, RoutedEventArgs e) { StringBuilder sb = new StringBuilder(); // TextPointer firstVisibleChar = MEFiles[0].textBox.GetPositionFromPoint(new Point(0, 0), true); // int pos = firstVisibleChar.DocumentStart.GetOffsetToPosition(firstVisibleChar); int caretPos = Util.Rtb_GetCaretPos(editItems[0].textBox); sb.Append(String.Format("\npos={0}", caretPos)); // TextPointer caretPos = MEFiles[0].textBox.CaretPosition; // TextPointer lineStartPos = caretPos.GetLineStartPosition(0); // int caretColumnPos = Math.Max(lineStartPos.GetOffsetToPosition(caretPos) - 1, 0); int caretColumnPos = Util.Rtb_GetCaretColumnPos(editItems[0].textBox); sb.Append(String.Format("\ncaretColumnPos={0}", caretColumnPos)); // TextPointer caretLineStart = caretPos.GetLineStartPosition(0); // // caretPos.get // TextPointer pp = MEFiles[0].textBox.Document.ContentStart.GetLineStartPosition(0); // int caretLinePos = 1; // while (true) // { // if (caretLineStart.CompareTo(pp) < 0) // { // break; // } // int result; // pp = pp.GetLineStartPosition(1, out result); // if (result == 0) // { // break; // } // caretLinePos++; // } int caretLinePos = Util.Rtb_GetCaretLinePos(editItems[0].textBox); sb.Append(String.Format("\ncaretLinePos={0}", caretLinePos)); // string lineText = new TextRange(caretPos.GetLineStartPosition(0), caretPos.GetLineStartPosition(1)).Text; string lineText = Util.Rtb_GetCaretLineText(editItems[0].textBox); sb.Append(String.Format("\nlineText=\"{0}\"", lineText.Trim())); sb.Append("\n"); BlockCollection bc = editItems[0].textBox.Document.Blocks; List <Block> bs = bc.ToList(); foreach (Block b in bs) { sb.Append("\nBlock/Paragraph"); Paragraph p = b as Paragraph; InlineCollection ic = p.Inlines; List <Inline> inls = ic.ToList(); foreach (Inline inl in inls) { sb.Append("\n Inline/Run"); Run r = inl as Run; if (r == null) { Bold bld = inl as Bold; if (bld == null) { throw new Exception(String.Format("buttonReport_Click: Bold=null")); } else { if (bld.Inlines.ToList().Count != 1) { throw new Exception(String.Format("buttonReport_Click: bld.Inlines.ToList().Count != 1")); } foreach (Inline inl2 in bld.Inlines.ToList()) { sb.Append("\n Inline/Bold/Run"); Run rr = inl2 as Run; if (rr == null) { sb.Append(String.Format("\n Run=null")); } else { sb.Append(String.Format("\n Run.Text.Length={0} Run.Text={1}", rr.Text.Length, rr.Text.Replace("\r", @"\r").Replace("\n", @"\n"))); // .Replace("\n", @"\n"))); } } } } else { sb.Append(String.Format("\n Run.Text.Length={0} Run.Text=\"{1}\"", r.Text.Length, r.Text.Replace("\r", @"\r").Replace("\n", @"\n"))); // .Replace("\n", @"\n"))); } } } string text = editItems[0].GetContent(); sb.Append(String.Format("\n\nText.Length={0} Text=\"{1}\"", text.Length, text)); Util.FileWrite(@"C:\temp\report.txt", sb.ToString()); }