WPF DocumentViewer Find-функция и документы FixedPage - PullRequest
7 голосов
/ 08 октября 2008

.Net содержит хороший элемент управления, называемый DocumentViewer. он также предлагает субконтроль для поиска текста в загруженном документе (по крайней мере, это то, что он должен делать).

При вставке объектов FixedPage в качестве источника документа для DocumentViewer, функция find просто ничего не находит. Даже не отдельные буквы. Я еще не пробовал FlowDocument, поскольку документация для DocumentViewer не так полезна, а ресурсы в сети на самом деле не существуют, сейчас я хочу спросить сообщество stackoverflow:

Что нужно для того, чтобы функция поиска WPF DocumentViewer работала с FixedPage документами?

[кстати, я не использую пользовательские ControlTemplates для DocumentViewer]

Ответы [ 2 ]

8 голосов
/ 14 мая 2009

У меня была такая же проблема с FixedDocuments. Если вы конвертируете свой FixedDocument в документ XPS, он будет работать нормально.

Пример создания документа XPS в памяти из FixedDocument с последующим отображением в 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

1 голос
/ 08 октября 2008

У меня были проблемы с поиском текста в richtextbox, это было слишком медленно. То, что я делал, было хламом xaml каждый раз, когда я хотел искать. Я улучшил несколько порядков.

Это большой обходной путь, основанный на части книги Криса Андерсона .

Приветствия

...