【发布时间】:2010-10-14 09:46:09
【问题描述】:
我们目前正在使用 WPF 创建多页发票文档,然后通过 XPS 打印/导出。
我们为此采取的方法是创建一个包含标准列表框等显示发票行的用户控件,然后将其包含在 BlockUIContainer 标记内的 FlowDocument 中。
当将此 FlowDocument 放置在窗口中的 FlowDocumentScrollViewer 标记内时,它可以完美地工作,并且 UserControl 的数据绑定内容可以正确显示。但是,当我们尝试在代码中创建相同的 FlowDocument 时,它会失败并出现“'Cannot create unknown type '{clr-namespace:FOO}FooUserControl”XamlParseException。如果删除 UserControl,则可以通过编程方式成功创建 FlowDocument。
这是 FlowDocument XAML:
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:MARS"
ColumnWidth="400" FontSize="14" FontFamily="Georgia">
<Paragraph>
Blah
</Paragraph>
<BlockUIContainer>
<local:printTestUserControl></local:printTestUserControl>
</BlockUIContainer>
这是我们用来在代码中创建它的代码:
FileStream xamlFile = new FileStream("printTestFlowDoc.xaml", FileMode.Open, FileAccess.Read);
FlowDocument content = (FlowDocument)XamlReader.Load(xamlFile);
flowDocScrollViewer.Document = content;
xamlFile.Close();
我们在代码中创建 FlowDocument 的原因是,然后使用 Paginator 对象将其分割成一系列 FixedDocuments,然后打印/导出到 XPS,我们还没有尝试过,但从我的到目前为止,这似乎是在 WPF 中实现多页文档打印的一种可行方法(文档在第一页有页眉,在最后一页有总计页脚,中间有 x 页的行)。
非常欢迎对此问题的任何建议或其他方法。
这些是我们迄今为止收集到的一些信息的一些链接,但遗憾的是还不够! (我将在 cmets 中包含其他链接,因为 StackOverflow 目前不信任我提供多个链接!)
See the section "Dynamically Creating a FlowDocument, Data Binding and Printing It"Scott Hanselmann 好像遇到了和我们一样的问题,只是加了一行
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.SystemIdle, new DispatcherOperationCallback(delegate { return null; }), null);
没有让我们的 FlowDocument 加载,但他只是绑定到 FlowDocument 中的 TextBlocks,而不是包含 UserControl。
非常感谢您阅读本文!以及任何人都可以提供的帮助。
【问题讨论】:
-
冯远 - 将XAML流文档转换为带样式的XPS(多页、页面大小、页眉、边距)blogs.msdn.com/b/fyuan/archive/2007/03/10/…
-
RoeCode 的 FlowDocument 打印系列的最后一部分roecode.wordpress.com/2008/05/28/…
-
MSDN - 如何:将 XAML 文件加载到 FlowDocumentScrollViewer msdn.microsoft.com/en-us/library/ms753299.aspx
标签: wpf printing flowdocument