WPF DocumentViewer Find-functionおよびFixedPageドキュメント
-
06-07-2019 - |
質問
.Netには、 という優れたコントロールが含まれています。 DocumentViewer
。また、ロードされたドキュメント内のテキストを検索するためのサブコントロールも提供します(少なくとも、それが実行されるはずです)。
FixedPage
を挿入する場合 DocumentViewer
のドキュメントソースとしてののオブジェクト、find-functionalityは何も検出しません。一文字でもない。 FlowDocument
を試していませんはまだです。
DocumentViewer
のドキュメントは有用ではなく、ネット上のリソースは実際には存在しないため、stackoverflowコミュニティに問い合わせたいと思います。
WPF DocumentViewer
のFind-Functionを FixedPage
ドキュメントで使用するには何が必要ですか?
[ところで、私は DocumentViewer
]にカスタム ControlTemplates
を使用しません
解決
FixedDocumentsでも同じ問題が発生しました。 FixedDocumentをXPSドキュメントに変換すると、正常に機能します。
FixedDocumentからメモリにXPSドキュメントを作成し、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をクランチすることでした。数桁改善しました。
これは、クリスアンダーソンの本の一部に基づいた大きな回避策です。 。
乾杯
所属していません StackOverflow