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

时间:2015-03-04 00:01:25

标签: c# wpf visual-studio-2012 mvvm pagination

我试图从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风格。

感谢。

1 个答案:

答案 0 :(得分:1)

最后我使用了Flow Inline Flowdocument。

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

打印BlockUIContainer中的每个控件。 (需要很多页面大小和边缘摆弄才能让分页工作完美) Section / BlockUI会自动进行分页 - 所以对我来说第一页是一个BlockUi而第二页是另一个 - 评论/询问更多信息

            <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);

如果您感到困惑并需要帮助(就像我一样),那么请不要犹豫,发表评论/提问。