2008-10-08 16 views
7

.Net enthält eine nette Steuerung namens DocumentViewer. Es bietet auch eine Untersteuerung zum Suchen von Text im geladenen Dokument (das ist zumindest, was es tun soll).WPF DocumentViewer Find-Funktion und FixedPage-Dokumente

Beim Einfügen der Objekte FixedPage als Dokumentquelle für die DocumentViewer findet die Find-Funktionalität nichts. Nicht einmal einzelne Buchstaben. Ich habe versucht, nicht FlowDocument ‚s noch, als Dokumentation für DocumentViewer nicht so nützlich ist und die Ressourcen im Netz nicht wirklich existieren, ich will jetzt die Gemeinde Stackoverflow fragen:

Was es zu bekommen braucht die Find-Funktion des WPF DocumentViewer Arbeiten mit FixedPage Dokumente?

Antwort

8

Ich hatte das gleiche Problem mit FixedDocuments. Wenn Sie Ihr FixedDocument in ein XPS-Dokument konvertieren, funktioniert es einwandfrei.

Beispiel zum Erstellen eines XPS-Dokuments im Speicher eines FixedDocuments, das dann in einem DocumentViewer angezeigt wird.

// Add to xaml: <DocumentViewer x:Name="documentViewer" /> 
// Add project references to "ReachFramework" and "System.Printing" 
using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.IO; 
using System.IO.Packaging; 
using System.Windows.Xps.Packaging; 

namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      // Set up demo FixedDocument containing text to be searched 
      var fixedDocument = new FixedDocument(); 
      var pageContent = new PageContent(); 
      var fixedPage = new FixedPage(); 
      fixedPage.Children.Add(new TextBlock() { Text = "Demo document text." }); 
      pageContent.Child = fixedPage; 
      fixedDocument.Pages.Add(pageContent); 

      // Set up fresh XpsDocument 
      var stream = new MemoryStream(); 
      var uri = new Uri("pack://document.xps"); 
      var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite); 
      PackageStore.AddPackage(uri, package); 
      var xpsDoc = new XpsDocument(package, CompressionOption.NotCompressed, uri.AbsoluteUri); 

      // Write FixedDocument to the XpsDocument 
      var docWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc); 
      docWriter.Write(fixedDocument); 

      // Display XpsDocument in DocumentViewer 
      documentViewer.Document = xpsDoc.GetFixedDocumentSequence(); 
     } 
    } 
} 

enter image description here

+0

+1 arbeitete perfekt für mich –

1

ich Probleme [btw, ich habe keine individuelle ControlTemplates für DocumentViewer verwenden] hatte mit Text in richtextbox suchen, war es zu langsam. Was ich getan habe, war das Xaml jedes Mal, wenn ich suchen wollte. Ich habe mehrere Größenordnungen verbessert.

Es ist eine große Workaround in einem Teil der Chris Anderson book basiert.

Prost