2008-10-08 15 views
7

. NET zawiera ładną kontrolkę o nazwie DocumentViewer. oferuje również podrzędne sterowanie dla znajdowania tekstu w załadowanym dokumencie (to przynajmniej to, co ma zrobić).Dokumentacja funkcji Finder i Dokumenty FixedPage w przeglądarce WPF

Po wstawieniu obiektów FixedPage jako źródła dokumentu dla DocumentViewer, funkcja wyszukiwania po prostu niczego nie znajduje. Nawet pojedynczych liter. Nie próbowałem FlowDocument „s jeszcze jako dokumentacji DocumentViewer nie jest przydatny i zasoby w sieci, nie są faktycznie istniejących, teraz chcę zapytać społeczność stackoverflow:

Co to trzeba uzyskać funkcja wyszukiwania w WPF DocumentViewer pracująca z dokumentami FixedPage?

[btw, nie używam zwyczaj ControlTemplates dla DocumentViewer]

Odpowiedz

8

miałem ten sam problem z FixedDocuments. Jeśli konwertujesz FixedDocument na dokument XPS, to działa dobrze.

Przykład tworzenia dokumentu XPS w pamięci z FixedDocument, a następnie wyświetlania w DocumentViewer.

// 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 działało idealnie dla mnie –

1

miałem problemy z wyszukiwaniem tekstu w RichTextBox, było zbyt powolne. To, co zrobiłem, to crunch XAML za każdym razem, gdy chciałem szukać. Poprawiłem kilka rzędów wielkości.

To duże obejście oparte na części book Chrisa Andersona.

Cheers