打印视觉、分页、MVVM 模式。

Print Visual, Pagination , MVVM Pattern.

我正在尝试使用 WPF 元素的分页打印视觉效果(或任何相关内容)。我正在使用 MVVM 模式开发。

这是我的视觉布局。用户可以滚动查看页面的位置。

  <ScrollViewer>
          <StackPanel x:Name="Wrapper">
              <StackPanel x:Name="PageOne" />
              <StackPanel x:Name="PageTwo" />
          </StackPanel>
  </ScrollViewer>

视觉效果通过按钮上的命令绑定传递。

 <Button Command="{Binding PrintCommand}" CommandParameter="{BindingElementName=Wrapper}"

视觉传递给打印方法。

PrintDialog newDialog = new PrintDialog();

newDialog.PrintVisual(MyVisualName, "Printing is Fun!");

我想对两个页面(以及更多)进行分页,并将视觉效果缩放到纸上,同时保持 MVVM 风格。

谢谢。

最后我使用了 Flow Inline Flowdocument。

 <FlowDocumentScrollViewer>
            <FlowDocument x:Name="EntirePage">
                <Section>
                    <BlockUIContainer>
                    </BlockUIContainer>
                </Section>
            </FlowDocument>
 </FlowDocumentScrollViewer>

打印 BlockUIContainer 中的每个控件。 (需要大量的页面大小和边距调整才能使分页完美运行)Section/BlockUI 会自动进行分页 - 所以对我来说,第一页是一个 BlockUi,第二页是另一个 - Comment/Ask更多信息

            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown">
                    <i:InvokeCommandAction Command="{Binding PrintCommand}" CommandParameter="{Binding ElementName=EntirePage}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers> 

我通过命令参数传递了 FlowDocument。

          printCommand = new RelayCommand(p => PreparePrint((FlowDocument)p));

(pageVisual 是通过命令参数传递的流文档)

然后在我得到的一些方法之间;

          IDocumentPaginatorSource idocument = pageVisual as IDocumentPaginatorSource;


          printDialog.PrintDocument(idocument.DocumentPaginator, "Printing Machine : " + Machine.Serial);

如果您感到困惑并需要帮助(就像我一样),请不要犹豫 comment/ask 个问题。