RichTextBlock溢出,将段落保存在一个页面上(在一个溢出控件中)

时间:2013-01-18 10:23:59

标签: xaml windows-8 windows-runtime windows-store-apps

我正在打印RichTextBlock内容,使用RichTextOverflow进行分页,它工作得很好但是我想在一个页面上保留段落,现在有时我会在段落中间分页。

以下是示例:

printing problem

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

2 个答案:

答案 0 :(得分:2)

如果你把你的段落放在InlineUIContainer中的TextBlock / RTB里面,它将被视为一个单独的元素,如果需要,它将不间断地转移到下一页。这种方法可能会产生一些副作用,但我认为它应该适用于打印。

答案 1 :(得分: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();      
}