我的场景:使用MVVM模式我将XAML FlowDocument
与ViewModel结合,不在UI上显示它,但将其转换为XPS文件。
这主要是有效的:一切都得到了正确呈现,包括Image
具有HTTP URL但相对较小或已经在UI上显示(因此被缓存)的gotcha
。唯一的Image
是大型图像,需要1-2秒才能完全下载。这些不包含在最终文件输出中;这里没什么大惊喜。但我需要一种方法来保证XPS输出将包含所有图像,无论大小或是否已经缓存。
想法#1:
在FlowDocument上有一些检查机制,可以找到所有图像并确定它们是否实际上已下载/准备就绪,然后当一切正常时,运行XPS转换
这里的问题是,即使我要创建一些精心设计的文档检查器,它也不像IsDownloading
控件有任何属性指示它已满载。
想法#2 急切地加载我知道将包含在FlowDocument中的所有图像。一旦它们处于神秘的WPF图像缓存中,理论上即使在XPS文件中渲染非常大的图像也应该没有问题。
我对这种方法有很大帮助,几乎可以使用它。我的问题是,如果图像已被缓存,我无法找到放弃热切下载的可靠方法;似乎没有办法测试它是否在缓存中。检查BitmapImage的true
属性似乎不可靠,因为即使给定的图像已经被缓存,它也经常会返回async Task
。
理想的解决方案
将是#1,并设置为await
客户端可以matrix_with_point = [0.5 1;0.25 0.5;0.75 0.5];
,直到FlowDocument中的所有图像都完全实现。