FlowDocument bir XPS belgesi olarak kaydedildiğinde, bir FlowDocument öğesinde bulunan görüntülerin gösterilmesi konusunda bazı zorluklar yaşıyorum. İşte FlowDocument içinde XPS belgesi olarak kaydedilen eksik resimler
benim yaptığım:- WPF Image kontrolü kullanarak bir görüntü oluşturun. Başlangıç kaynağını BeginInit/EndInit'e yönlendiren görüntü kaynağını ayarlıyorum.
- Görüntüyü, BlockUIContainer ürününde bulunan FlowDocument dosyasına ekleyin.
- FlowDocument nesnesini, this code'un değiştirilmiş bir sürümünü kullanarak bir XPS dosyasına kaydedin.
Kaydedilen dosyayı XPS görüntüleyicide görüntülediğimde, görüntü gösterilmez. Sorun, görüntülerin WPF tarafından ekranda gösterilene kadar yüklenmemesi ve böylece XPS dosyasına kaydedilmemeleridir. Bu nedenle, bir geçici çözüm var: Belgeyi FlowDocumentPageViewer kullanarak ekranda ilk görüntüledikten sonra XPS dosyasını daha sonra kaydedersem, görüntü yüklenir ve XPS dosyasında görünür. Bu FlowDocumentPageViewer gizli olsa bile çalışır. Ama bu bana başka bir meydan okuma veriyor. Burada (pseudocode) yapmak isteyen budur: FlowDocumentPageViewer asla belge XPS dosyasına kaydedilir önce içeriğini göstermek için bir şans olur çünkü
tabiivoid SaveDocument()
{
AddFlowDocumentToFlowDocumentPageViewer();
SaveFlowDocumentToXpsFile();
}
Bu işe yaramaz. Dispatcher.BeginInvoke bir çağrıya SaveFlowDocumentToXpsFile sarma çalıştı ancak yardımcı olmadı.
Sorularım şunlardır:
- ben bir şekilde aslında ekranda belge göstermeden XPS dosyayı kaydetmeden önce yüklemeye görüntüleri zorlayabilir miyim? (Hiçbir şansla BitmapImage.CreateOptions ile uğraşmaya çalıştı).
- # 1 numaralı soruya çözüm bulunmuyorsa, FlowDocumentPageViewer'ın içeriğini ne zaman yüklemeyi bitirdiğini anlamanın bir yolu var, böylece XPS dosyasını oluşturmak için ne zaman kaydedileceğini biliyorum.
Yazdırma öncesinde FlowDocument'i bir görüntüleyicide göstermenin bir yolunu buldunuz mu? Belgesini doğru şekilde oluşturması için benzer bir "kesmek" düşünürüm. – Dennis
@DennisRoche: Hayır, ne yazık ki bir dosyaya kaydetmeden önce ekranda kısaca belgeyi gösteren daha iyi bir çözüm bulamadılar. Daha iyi bir çözüm bulursanız lütfen bize bildirin. –
Mantıksal bir ağaca yürümek için 'ContextualLayoutManager'ı kullanan olası bir çözümüm olabilir. Çalışırsa, size bildireceğim. Aksi halde, yaptığınız gibi belgeyi bir görüntüleyiciye yüklemeyi tercih ederim, ancak pencere yerini X: 10,000 Y: 10,000 olarak ayarlayacaktır, böylece kullanıcı bunu görmeyecektir. – Dennis