У меня возникают некоторые трудности с получением изображений, содержащихся в FlowDocument, для отображения, когда FlowDocument сохраняется как документ XPS.
Вот что я делаю:
- Создайте изображение с помощью Image управление WPF. Я установил источник изображения, заключенный в скобки с помощью вызовов BeginInit / EndInit.
- Добавьте изображение в FlowDocument, заключив его в BlockUIContainer а>.
- Сохраните объект FlowDocument в файл XPS, используя измененную версию этот код.
Если я затем просматриваю сохраненный файл в средстве просмотра XPS, изображение не отображается. Проблема в том, что изображения не загружаются до тех пор, пока они не будут отображены на экране WPF, поэтому они не сохраняются в файле XPS. Следовательно, есть обходной путь: если я сначала покажу документ на экране с помощью FlowDocumentPageViewer, а затем сохраните файл XPS, изображение загружается и отображается в файле XPS. Это работает, даже если FlowDocumentPageViewer скрыт. Но это ставит меня перед другой проблемой. Вот что я хочу сделать (в псевдокоде):
void SaveDocument()
{
AddFlowDocumentToFlowDocumentPageViewer();
SaveFlowDocumentToXpsFile();
}
Это, конечно, не работает, поскольку FlowDocumentPageViewer никогда не получает возможности показать свое содержимое до того, как документ будет сохранен в файл XPS. Я попытался обернуть SaveFlowDocumentToXpsFile при вызове Dispatcher.BeginInvoke, но это не помогло.
Мои вопросы:
- Могу ли я каким-то образом заставить изображения загружаться перед сохранением файла XPS без фактического отображения документа на экране? (Я пробовал возиться с BitmapImage.CreateOptions безуспешно).
- Если нет решения для вопроса №1, есть ли способ узнать, когда FlowDocumentPageViewer завершил загрузку своего содержимого, чтобы я знал, когда он сохраняется для создания файла XPS?
ContextualLayoutManager
для перехода к логическому дереву. Я дам вам знать, если это сработает, я дам вам знать. В противном случае я прибегну к загрузке документа в программу просмотра, как это сделали вы, однако установлю расположение окна на X: 10 000 Y: 10 000, чтобы пользователь не видел его. - person Dennis   schedule 27.02.2012