从单个视图模型打印多个页面



我目前对以下问题有点困扰。我有一个用户界面,它基本上显示了一个图形(由线条,圆圈,…这些都是WPF对象)。根据用户在菜单中所做的选择,有些项被删除,有些项被添加。所以基本图像看起来是一样的,但是做了一些修改。

用户可以通过点击下一步/上一步按钮来选择——比如说——10个不同的"页面"。

我使用MVVM Light,我的ViewModel包含图形的所有项(所有行,…)。

现在我想将该图形打印到多个页面。第一页应该包含从第1页更改的图形,第二页包含从第2页更改的图形,依此类推。实际的页数是动态的。我使用属性CurrentPage和属性PagesTotal来跟踪这一点。每当我按下"Next"按钮时,这将导致执行一个命令,该命令将改变变量CurrentPage,并确保显示正确的项。

现在我想打印这个,但这是我卡住的地方。我不介意离开MVVM区域,在代码背后做一些肮脏的工作,但我拒绝像以前的GDI那样重新绘制所有东西。

欢迎大家多多指教

创建一个包含显示逻辑(例如图形)的UserControl。抓住你的ViewModel列表并在UserControls中项目,将每个ViewModel设置为每个UserControl的DataContext。强制每一个渲染调用测量无限值,然后安排与结果DesiredHeight和Width。然后按照程序打印WPF视觉效果(链接链接链接)。

基本上,当且仅当您的视图独立工作时,这应该是相当简单的;例如,你的ViewModel不包含放置在视图中的ui元素。

简单的解决方案是打印你的视觉根。如果需要,首先将视图封装在用户控件中。

PrintDialog printDlg = new PrintDialog();
UserControl1 uc = new UserControl1();
printDlg.PrintVisual(uc, "User Control Printing."); 
参考

好了,我必须管理,我现在切换回只通过代码进行打印。我真的很喜欢用"wpf风格",但是处理多页的问题实在是太麻烦了。

无论如何,关于打印输出还有一个问题,但这将是另一个问题。

最新更新