【发布时间】:2016-03-07 17:04:36
【问题描述】:
我在尝试打印存储在 .xaml 文件中的 FlowDocument 时发现了一个奇怪的行为。让我向您展示这是如何工作的。我们有一个类似 ViewModel 的简单类:
public class FooViewModel
{
public FlowDocument Fd { get; set; }
public FooViewModel()
{
this.Fd = Application.LoadComponent(new Uri("/someassembly;component/somepath.xaml", UriKind.Relative)) as FlowDocument;
}
public void Print()
{
PrintDialog pd new PrintDialog();
pd.PrintQueue = new PrintQueue(new LocalPrintServer(), "Canon MP280 series");
FlowDocument document = this.Fd;
document.DataContext = new LabelTicket(); //stores data for printing
DocumentPaginator dp = ((IDocumentPaginatorSource)document).DocumentPaginator;
pd.PrintDocument(dp, "someTitle");
}
}
此代码有效,打印作业已启动,物理打印机正在执行它的工作。但是当我们将Print()方法中的一行改成:
FlowDocument document = Application.LoadComponent(new Uri("/someassembly;component/somepath.xaml", UriKind.Relative)) as FlowDocument;
奇怪的事情开始发生。将组件加载延迟到实际打印会使打印变得不可能。打印作业出现在此特定打印机的 Windows 打印队列中,但几乎立即消失。打开打印的 Windows 事件跟踪显示:“打印处理器返回的 Win32 错误代码:63 (0x3f)。”将打印机更改为任何其他物理打印机都会产生相同的效果。
另一方面,将打印机更改为任何非物理打印机(如“Microsoft XPS Document Writer”)可以毫无问题地执行此打印。
我也尝试从 ResourceDictionary 加载 FlowDocument,但效果相同。谁能给我一个提示如何解决这个问题?
【问题讨论】:
-
Fd绑定到 UI 了吗?
标签: c# wpf printing flowdocument