【发布时间】:2010-03-11 13:19:12
【问题描述】:
我在获取 FlowDocument 中包含的图像以显示 FlowDocument 何时保存为 XPS 文档时遇到了一些困难。
这是我的工作:
- 使用 WPF 的Image 控件创建图像。我设置了通过调用 BeginInit/EndInit 括起来的图像源。
- 将图像添加到 FlowDocument 并将其包装在 BlockUIContainer 中。
- 使用 this code 的修改版本将 FlowDocument 对象保存到 XPS 文件中。
如果我随后在 XPS 查看器中查看保存的文件,则不会显示图像。问题是图像在 WPF 实际显示在屏幕上之前不会加载,因此它们不会保存到 XPS 文件中。因此,有一个解决方法:如果我首先使用 FlowDocumentPageViewer 在屏幕上显示文档,然后保存 XPS 文件,则图像会加载并显示在 XPS 文件中。即使 FlowDocumentPageViewer 被隐藏,这也有效。但这给了我另一个挑战。这是我想做的(在伪代码中):
void SaveDocument()
{
AddFlowDocumentToFlowDocumentPageViewer();
SaveFlowDocumentToXpsFile();
}
这当然行不通,因为在将文档保存到 XPS 文件之前,FlowDocumentPageViewer 从来没有机会显示其内容。我尝试将 SaveFlowDocumentToXpsFile 包装在对 Dispatcher.BeginInvoke 的调用中,但没有帮助。
我的问题是:
- 我能否在保存 XPS 文件之前以某种方式强制加载图像而不实际在屏幕上显示文档? (我尝试摆弄BitmapImage.CreateOptions 没有运气)。
- 如果问题 #1 没有解决方案,有没有办法知道 FlowDocumentPageViewer 何时完成加载其内容,以便我知道何时保存以创建 XPS 文件?
【问题讨论】:
-
您是否找到在打印前在查看器中显示 FlowDocument 的方法?我正在考虑使用类似的“hack”来让我的文档正确呈现。
-
@DennisRoche:不,不幸的是,我从来没有找到比在将文档保存到文件之前在屏幕上短暂显示文档更好的解决方案。如果您找到更好的解决方案,请告诉我。
-
我可能有一种可能的解决方案,它使用
ContextualLayoutManager走到逻辑树。我会让你知道它是否有效我会让你知道。否则,我将像您一样将文档加载到查看器中,但是会将窗口位置设置为 X:10,000 Y:10,000,以便用户看不到它。
标签: wpf image flowdocument xpsdocument