我有一个固定大小为 850x1100 的 UserControl,可以为我提供与信纸大小的纸张相同的纵横比。我在我的窗口中显示Viewbox
它,它的作用很像打印预览。该控件继承了我的窗口的 DataContext,当它显示在屏幕上时,所有的绑定都起作用并且看起来很棒。
我在后面的窗口代码中编写了下面的代码(我觉得这是一个完全面向视图的操作)来尝试打印它。如果我按照编写的方式执行此代码,则控件会打印,但似乎没有数据绑定。
private void PrintButton_Click(object sender, RoutedEventArgs e) {
var dlg = new PrintDialog();
var result = dlg.ShowDialog();
if (result == null || !(bool)result)
return;
var page = new InspectionFormPrintView { DataContext = this.DataContext };
page.Measure(new Size(dlg.PrintableAreaWidth, dlg.PrintableAreaHeight));
page.Arrange(new Rect(new Point(0, 0), page.DesiredSize));
dlg.PrintVisual(page, "Inspection Form");
}
如果我将该方法中的最后一行修改为
Dispatcher.BeginInvoke(new Action(() => dlg.PrintVisual(page, "Inspection Form")), DispatcherPriority.ApplicationIdle, null);
它会打印得很好。为什么是这样?