我在FlowDocument中包含的圖像顯示何時將FlowDocument保存爲XPS文檔時遇到了一些困難。FlowDocument中的圖像保存爲XPS文檔
這裏是我做的:
- 使用Image控制WPF的創建圖像。我通過調用BeginInit/EndInit將圖像源設置爲方括號。
- 將圖像添加到FlowDocument中,並將其包裝在BlockUIContainer中。
- 使用修改後的this code版本將FlowDocument對象保存到XPS文件。
如果我然後在XPS查看器中查看保存的文件,則圖像不會顯示。問題是,圖像不會加載,直到WPF實際顯示在屏幕上,因此它們不會保存到XPS文件中。因此,有一種解決方法:如果我首先使用FlowDocumentPageViewer在屏幕上顯示文檔,然後保存XPS文件,則圖像將加載並顯示在XPS文件中。即使FlowDocumentPageViewer處於隱藏狀態,這也可以工作。但那給了我另一個挑戰。這是我希望做的(僞代碼):
void SaveDocument()
{
AddFlowDocumentToFlowDocumentPageViewer();
SaveFlowDocumentToXpsFile();
}
當然,這並不工作,因爲FlowDocumentPageViewer從來沒有得到一個機會,以顯示其內容之前,文件被保存到XPS文件。我嘗試在調用Dispatcher.BeginInvoke時包裝SaveFlowDocumentToXpsFile,但它沒有幫助。
我的問題是:
- 我可以以某種方式保存XPS文件,而無需實際顯示在屏幕上的文件之前強制圖像加載? (我試着用沒有運氣的BitmapImage.CreateOptions擺弄)。
- 如果問題#1沒有解決方案,有沒有辦法告訴FlowDocumentPageViewer何時完成加載其內容,以便知道何時保存以創建XPS文件?
您是否在打印機之前找到了在查看器中顯示FlowDocument的方法?我正在考慮類似的「黑客」來讓我的文檔正確呈現。 – Dennis 2012-02-25 20:31:24
@ DennisRoche:不,不幸的是,我從來沒有找到比在屏幕上簡單顯示文檔之前將其保存到文件中的更好的解決方案。如果您找到更好的解決方案,請讓我知道。 – 2012-02-26 17:30:02
我可能有一個可能的解決方案,它使用'ContextualLayoutManager'來走向邏輯樹。我會讓你知道它是否有效,我會讓你知道。否則,我將盡可能地在查看器中加載文檔,但會將窗口位置設置爲X:10,000 Y:10,000,以便用戶不會看到它。 – Dennis 2012-02-26 22:55:09