我试图从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风格。
感谢。
答案 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);
如果您感到困惑并需要帮助(就像我一样),那么请不要犹豫,发表评论/提问。