作为记录,这一直在等到 SO 允许我回答我自己的问题。我不能说我同意这种“逻辑”。
好吧,至少现在,我或多或少地弄清楚了一些事情。我仍将使用视觉效果进行打印,因为它允许我使用我已经使用过的相同 xaml 代码。它并不完美,但我会分享我所拥有的。
首先,我已经有一组要打印的对象。这是出于测试目的,因为这将是并且应该是用户定义的集合。然后我将该集合传递给我的打印函数,如下所示:
private void Print_Test()
{
PrintDialog dlg = new PrintDialog();
if (dlg.ShowDialog() == false) return;
int i = 1;
Size pageSize = new Size(dlg.PrintableAreaWidth, dlg.PrintableAreaHeight); //I found this Size object very important. Without it I only got an empty page
ReportPrintForm rf;
foreach (KeyValuePair<String, Report> kvp in ((App)Application.Current).Reports)
{
rf = new ReportPrintForm(kvp.Value);
rf.Measure(pageSize);
rf.Arrange(new Rect(0, 0, pageSize.Width, pageSize.Height));
dlg.PrintVisual(rf, "Job_" + i);
i++;
}
}
现在,我知道这不是一个完美的功能,因为每个表单都在自己的工作中打印,但它是解决我使用一个严格创建的“表单”打印出多个对象的问题的起点。这将在用户没有看到的情况下打印出该表单,如果我想为用户演示使用一组样式并为可打印版本使用一组样式,这很好。一个缺点是,至少目前,我必须手动设置字段(文本框)的内容,并且不能依赖 DataContext 字段。我不知道为什么,但同样,这只是稍后完成我的问题的起点。