Domanda

.Net contiene un bel controllo chiamato DocumentViewer . offre anche un controllo secondario per la ricerca di testo nel documento caricato (è almeno quello che dovrebbe fare).

Quando si inserisce FixedPage come oggetti del documento come DocumentViewer , la funzionalità find non trova proprio nulla. Neanche lettere singole. Non ho provato FlowDocument è ancora, poiché la documentazione per DocumentViewer non è così utile e le risorse in rete non sono effettivamente esistenti, ora voglio chiedere alla comunità di StackOverflow:

Di cosa ha bisogno per far funzionare la funzione Trova del DocumentViewer WPF con i documenti FixedPage ?

[a proposito, non uso ControlTemplates personalizzati per DocumentViewer ]

È stato utile?

Soluzione

Ho avuto lo stesso problema con FixedDocuments. Se converti FixedDocument in un documento XPS, allora funziona perfettamente.

Esempio di creazione di un documento XPS in memoria da un FixedDocument e successiva visualizzazione in 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();
        }
    }
}

 inserisci qui la descrizione dell'immagine

Altri suggerimenti

Ho avuto problemi con la ricerca di testo in richtextbox, era troppo lento. Quello che ho fatto è stato sgranocchiare xaml ogni volta che volevo cercare. Ho migliorato diversi ordini di grandezza.

È una grande soluzione basata su una parte del libro .

Saluti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top