WPF DocumentViewer Find-функция и документы FixedPage
.Net содержит хороший элемент управления DocumentViewer
, он также предлагает субконтроль для поиска текста в загруженном документе (это по крайней мере то, что он должен делать).
При вставке FixedPage
объекты в качестве источника документа для DocumentViewer
, найти-функционал просто ничего не находит. Даже не отдельные буквы. Я не пробовала FlowDocument
в качестве документации для DocumentViewer
это не так полезно, и ресурсы в сети на самом деле не существуют, теперь я хочу спросить сообщество stackru:
Что нужно, чтобы получить функцию поиска в WPF DocumentViewer
работать с FixedPage
документы?
[кстати, я не использую обычай ControlTemplates
за DocumentViewer
]
2 ответа
У меня была такая же проблема с 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();
}
}
}
У меня были проблемы с поиском текста в richtextbox, это было слишком медленно. То, что я делал, было хламом xaml каждый раз, когда я хотел искать. Я улучшил несколько порядков.
Это большой обходной путь, основанный на части книги Криса Андерсона.
ура