Documenti WPF DocumentViewer Trova-funzione e FixedPage
-
06-07-2019 - |
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
]
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();
}
}
}
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