0

我正在打印 RichTextBlock 内容,使用 RichTextOverflow 进行分页,效果很好,但我想将段落放在一页上,现在有时我在段落中间有分页符。

这是示例:

打印问题

第 3 段应该在下一页,似乎 ITextParagraphFormat.KeepTogether 正是我所需要的,但不知道如何为 RichTextBlock 获取它。

4

2 回答 2

2

如果您将段落放在 InlineUIContainer 内的 TextBlock/RTB 中,它将被视为单个元素,并在需要时完整地延续到下一页。这种方法可能有一些副作用,但我相信它应该适用于打印。

于 2013-01-18T20:46:35.260 回答
0

毕竟我做了一个方法,将在两页上被打破的段落“推”到下一页,我对这个解决方案不是很满意,但我没有找到另一种方法

public static void BreakBeforeLastParagraph(RichTextBlockOverflow rto)
{
  if (!rto.HasOverflowContent)
    return;

  var pageBreak = rto.ContentEnd.Offset;
  var brokenPar = rto.ContentSource.Blocks.FirstOrDefault(pr => pr.ElementStart.Offset <= pageBreak && pr.ElementEnd.Offset >= pageBreak);
  if (brokenPar != null)
  {
    double spacerSize = pageBreak - brokenPar.ElementStart.Offset;
    var spacer = new Paragraph();
    spacer.Margin = new Windows.UI.Xaml.Thickness(0,spacerSize, 0,0);
    rto.ContentSource.Blocks.Insert(rto.ContentSource.Blocks.IndexOf(brokenPar), spacer);
  }
  rto.UpdateLayout();      
}
于 2013-01-18T16:16:21.847 回答