关于WPF PrintDialog.PrintDocument打印FlowDocument时,页面上的UI元素会消失的问题!(语言-c#)

#WPF,在使用PrintDialog.PrintDocument打印FlowDocument时,页面上的UI元素会消失的问题

我这里用了一个测试页来展示问题
页面上有一个FlowDocumentScrollViewer,里边是要打印的FlowDocument,

<FlowDocumentScrollViewer Grid.Row="1">
            <FlowDocument Name="document">
                <BlockUIContainer> 
                    <RichTextBox Height="500">
                        
                    </RichTextBox>
                </BlockUIContainer>
            </FlowDocument>
        </FlowDocumentScrollViewer>

打印的代码也很简单

private void Button_Click(object sender, RoutedEventArgs e)
        {

            PrintDialog dialog = new PrintDialog();
            if (dialog.ShowDialog() == true)
            {

                var paginator = ((IDocumentPaginatorSource)document).DocumentPaginator;
                dialog.PrintDocument(paginator, "Print Test");

            }
        }

页面效果如下

img

点击按钮打印后,打印出的PDF是正常的,但是UI上的RichTextBox就消失了

img

此时如果滚动滚动条,就会报错

System.NullReferenceException:“Object reference not set to an instance of an object.”

   在 MS.Internal.PtsHost.FlowDocumentPage.UpdateViewport(FSRECT& viewport, Boolean drawBackground)

如果是调整窗口大小的话,元素就会重新显示出来,如下图,

img


希望有朋友指点一下,谢谢!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/1051550
  • 除此之外, 这篇博客: WPF从零到1教程详解,适合新手上路中的 RichTextBox的演示代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    
            <RichTextBox Name="richTB">
                <FlowDocument>
                    <Paragraph TextIndent="20">
                        将 HTML 内容粘贴到 RichTextBox 应用程序中可能会导致意外行为,因为 RichTextBox 使用 RTF 格式,而不是直接使用 HTML 格式。
    文本始终换行 。
                        <LineBreak/>
                        RichTextBox 如果不希望文字换行,请将 PageWidth on FlowDocument 设置为大于宽度 RichTextBox。 但是,到达页面宽度后,文本仍会换行。
                    </Paragraph>
                    <Paragraph>
                        <!--<Label>111</Label>
                        <CheckBox>1112</CheckBox>
                        <GroupBox Header="GroupBox"> </GroupBox>-->
                        <Run>Paragraph 2</Run>
                    </Paragraph>
    
                    <!--BlockUIContainer 块状容器 只支持一个子元素 如果需要多个标签 需要在最外面嵌入一个布局容器-->
                    <BlockUIContainer>
                        <StackPanel>
                            <Label>Paragraph 2</Label>
                            <CheckBox>1112</CheckBox>
                        </StackPanel>
                    </BlockUIContainer>
                    
                    <!--实现数学公式 x的4次方+y的3次方 = 99 -->
                    <Paragraph FontSize="50">
                        <Run>x</Run>
                        <InlineUIContainer >
                            <Label Margin="-10,0,0,0" FontSize="30">4</Label>
                        </InlineUIContainer>
                        <Run>+</Run>
                        <Run>y</Run>
                        <InlineUIContainer >
                            <Label Margin="-10,0,0,0" FontSize="30">3</Label>
                        </InlineUIContainer>
                        <Run>=</Run>
                        <Run>99</Run>
                    </Paragraph>
    
                </FlowDocument>
            </RichTextBox>
    


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^