我正在打印RichTextBlock内容,使用RichTextOverflow进行分页,它工作得很好但是我想在一个页面上保留段落,现在有时我会在段落中间分页。
以下是示例:
第3段应该在下一页,似乎ITextParagraphFormat.KeepTogether正是我需要的,但不知道如何为RichTextBlock获取它。
答案 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();
}