2008-10-08 4 views
7

.Net contient un bon contrôle appelé DocumentViewer. il offre également un sous-contrôle pour trouver du texte dans le document chargé (c'est du moins ce qu'il est censé faire). Lors de l'insertion des objets FixedPage comme source de document pour le DocumentViewer, la fonctionnalité de recherche ne trouve rien. Pas même des lettres simples. Je ne l'ai pas encore essayé FlowDocument « s, que la documentation DocumentViewer est pas utile et les ressources sur le net ne sont pas réellement existant, je veux maintenant demander à la communauté stackoverflow:Documents WPF DocumentViewer Find-function et FixedPage

Que faut-il besoin d'obtenir la fonction de recherche du WPF DocumentViewer fonctionnant avec FixedPage documents?

[BTW, je n'utilise pas coutume ControlTemplates pour DocumentViewer]

Répondre

8

J'ai rencontré le même problème avec FixedDocuments. Si vous convertissez votre FixedDocument en document XPS, cela fonctionne correctement.

Exemple de création d'un document XPS en mémoire à partir d'un FixedDocument puis affichage dans un 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 a parfaitement fonctionné pour moi –

1

J'ai eu des problèmes avec la recherche du texte dans richtextbox, il était trop lent. Ce que j'ai fait était de croquer le xaml chaque fois que je voulais chercher. J'ai amélioré plusieurs ordres de grandeur.

C'est une grande solution de contournement basée dans une partie de book de Chris Anderson.

Salutations

Questions connexes