rentaotao2016 2023-04-06 10:07 采纳率: 0%
浏览 18

关于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


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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-06 23:31
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 帮你找了个相似的问题, 你可以看下: 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>
      


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

报告相同问题?

问题事件

  • 修改了问题 4月6日
  • 修改了问题 4月6日
  • 修改了问题 4月6日
  • 创建了问题 4月6日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了