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

Xaml RichTextBlock溢出,将段落放在一个页面上(在一个溢出控件中),xaml,windows-8,windows-runtime,windows-store-apps,Xaml,Windows 8,Windows Runtime,Windows Store Apps,我正在打印RichTextBlock内容,使用RichTextOverflow进行分页,它工作得很好,但我希望将段落放在一页上,现在有时我在段落中间有分页符 以下是一个例子: 第3段应该在下一页,似乎ITextParagraphFormat.KeepTogether正是我所需要的,但我不知道如何为RichTextBlock获得它。毕竟我做了一个方法,将两页上的段落“推”到下一页,我对这个解决方案不太满意,但我没有找到其他方法 public static void BreakBeforeLast

我正在打印RichTextBlock内容,使用RichTextOverflow进行分页,它工作得很好,但我希望将段落放在一页上,现在有时我在段落中间有分页符

以下是一个例子:


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

毕竟我做了一个方法,将两页上的段落“推”到下一页,我对这个解决方案不太满意,但我没有找到其他方法

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();      
}
public static void breakbeforelastpragement(RichTextBlockOverflow rto)
{
如果(!rto.HasOverflowContent)
返回;
var pageBreak=rto.ContentEnd.Offset;
var brokernpar=rto.ContentSource.Blocks.FirstOrDefault(pr=>pr.ElementStart.Offset=pageBreak);
if(brokenPar!=null)
{
双间隔符大小=分页符-brokenPar.ElementStart.Offset;
var间隔=新段落();
spacer.Margin=newwindows.UI.Xaml.Thickness(0,spacerSize,0,0);
rto.ContentSource.Blocks.Insert(rto.ContentSource.Blocks.IndexOf(brokernpar),间隔符);
}
rto.UpdateLayout();
}

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

感谢您继续提供解决方案。我仍然想知道是否有一种声明性的方式来告诉它在一页上保留一段。不过,我对此表示怀疑。我将:)这将是一个非常好的功能,尤其是在处理打印时