1

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

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

我正在使用 MVVM Light 并且我的 ViewModel 包含图形的所有项目(所有线条,...)。

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

现在我想打印这个,但这是我卡住的地方。我不介意离开 MVVM 区域并在代码隐藏中做一些肮脏的工作,但我会拒绝像过去的 GDI 时代那样再次绘制所有内容。

任何想法都非常受欢迎。

4

3 回答 3

2

创建一个包含您的显示逻辑的 UserControl(例如,您的图形)。在 UserControls 中获取 ViewModel 列表和项目,将每个 ViewModel 设置为每个 UserControl 的 DataContext。强制每个人使用无限值​​渲染调用 Measure,然后使用生成的 DesiredHeight 和 Width 进行排列。然后按照程序打印 WPF 视觉效果(链接 链接 链接)。

于 2013-03-01T17:19:46.707 回答
1

本质上,当且仅当您的视图独立工作时,这应该非常简单;即您的 ViewModel 不包含放置在您的视图中的 UiElements。

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

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

参考

于 2013-03-01T19:24:54.183 回答
-1

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

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

于 2013-03-05T15:00:24.173 回答